自然语言处理的基本操作

📄 文章 🌐 公开
📋 列表 ✏️ 编辑 🎨 画布版 📋 复制MD 🌐 复制HTML ☆ 收藏

上一版的 否定、因果、关系、属性 其实已经是“语言学层面的高级操作”了。比如“否定”完全可能不是基本函数,而只是:

对一个已有结构进行修改。

如果一直往下拆,我会把自然语言处理的基本操作压缩到类似增、删、改、移、复制、匹配、组合这一层。


一、先不要问“这句话是什么意思”,而问“对一个语言结构做什么操作”

可以把 NLP 看成一个对象变换系统:

输入语言结构
      ↓
   基本操作
      ↓
新的语言结构

例如:

小明喜欢猫

修改成:

小明不喜欢猫

最基本的事情其实只有:

找到“喜欢”
↓
修改
↓
“喜欢” → “不喜欢”

所以“否定”未必是一个基本函数。


二、我认为最值得测试的最小操作可以是这几个

我先给一个非常激进的版本。

① 查找 FIND

从结构中找到某个元素。

FIND(猫)

例如:

小明喜欢黑猫。

找到:

小明
喜欢
黑
猫

甚至可以不是按照“词”查找,而是寻找符合某种条件的节点。


三、替换 REPLACE

这是最重要的基本操作之一。

REPLACE(A, B)

例如:

小明喜欢猫

替换:

小明 → 小红

得到:

小红喜欢猫

也可以:

猫 → 狗

得到:

小明喜欢狗

四、修改 MODIFY

替换和修改可以区分。

替换是:

A → B

修改是:

保留 A 的主体,只改变某个属性。

例如:

黑猫

修改颜色:

黑猫 → 白猫

或者:

小明很高

修改程度:

小明很高 → 小明非常高

不过这里要注意:

替换和修改到底需不需要分开,是实验问题。

甚至可以尝试:

一切修改都是替换。

如果真的可以,那么基本函数还可以进一步减少。


五、删除 DELETE

例如:

小明昨天去了北京。

删除“昨天”:

小明去了北京。

删除“北京”:

小明去了。

因此:

DELETE(x)

可能是非常底层的操作。


六、插入 INSERT

和删除对应:

INSERT(x, position)

例如:

小明去了北京。

插入:

昨天

变成:

小明昨天去了北京。

所以很多语言变化其实可以理解成:

删除
+
插入

七、移动 MOVE

这个也很有意思。

例如:

小明昨天去了北京。

变成:

昨天,小明去了北京。

这里很多信息其实没有改变,只是:

MOVE(昨天, 句首)

所以“语序”可能根本不需要一个复杂的语言模型来理解。


八、复制 COPY

自然语言里大量存在重复引用。

例如:

小明拿起苹果,然后他吃掉了它。

这里:

他 → 小明
它 → 苹果

某种意义上就是:

COPY_REFERENCE(小明 → 他)
COPY_REFERENCE(苹果 → 它)

更底层一点,可以叫:

REFERENCE

但我甚至会测试:

引用是否可以由“匹配 + 复制”产生?

九、匹配 MATCH

这是我认为特别重要的一个。

例如:

小明喜欢猫。

下一句:

他每天都去看它。

系统需要发现:

他 ≈ 小明
它 ≈ 猫

这就是:

MATCH(A, B)

而且 MATCH 不一定是完全相同。

例如:

汽车

和:

这辆车

也可以匹配。

所以:

语义理解可能很大一部分就是在寻找“哪些东西可以匹配”。

十、组合 COMBINE

最后是把几个结构放在一起。

例如:

小明喜欢猫

和:

猫喜欢吃鱼

组合:

小明喜欢猫,猫喜欢吃鱼。

更进一步:

小明喜欢[猫喜欢吃的鱼]

于是:

COMBINE(A, B)

可能是语言产生复杂结构的核心操作。


十一、这样可以得到一个非常小的“语言操作集”

我建议第一版甚至只测试:

操作含义
FIND找到某个元素
MATCH判断两个元素/结构是否对应
INSERT插入
DELETE删除
REPLACE替换
MOVE移动
COPY复制
COMBINE组合

甚至可以进一步挑战:

能不能把 8 个继续压缩到 4~5 个?

例如:

FIND
MATCH
MODIFY
COMBINE

然后看看:

INSERT
DELETE
REPLACE
MOVE
COPY

是不是都可以由这几个操作组合出来。


十二、举一个非常有意思的例子

例如原句:

小明喜欢猫。

我们想得到:

小明不喜欢狗。

传统 NLP 可能认为这是一个新的句子,要重新理解。

但你的体系可以认为:

原结构:

        喜欢
       /    \
     小明    猫

然后:

第一步:MATCH

找到:

第二步:REPLACE

猫 → 狗

得到:

小明喜欢狗。

第三步:MODIFY

喜欢 → 不喜欢

得到:

小明不喜欢狗。

也就是说:

原句
 ↓
找到
 ↓
匹配
 ↓
修改
 ↓
新句

这比直接判断整个句子的语义简单得多。


十三、甚至可以把“复杂语言理解”看成程序执行

这是我觉得你这个想法最值得深入的地方。

例如:

小明昨天买了一辆红色汽车。他今天把它卖给了小王。

系统不是直接把第二句话变成一个巨大的向量。

而是执行一系列非常简单的操作:

FIND("他")
        ↓
MATCH("他", 前文人物)
        ↓
MATCH → 小明

FIND("它")
        ↓
MATCH("它", 前文物体)
        ↓
MATCH → 红色汽车

建立事件
        ↓
小明
卖
红色汽车
小王

那么:

“理解文章”是不是本质上就是不断执行这些简单操作?

这就是一个非常值得实验的问题。


十四、这甚至可以形成你的“基函数假说”

我建议你暂时把理论表述成:

自然语言的复杂结构可能不是由大量不可约的高级语义模块构成,而是由少量基本操作在不同对象、不同层级上递归组合而成。

进一步可以提出:

自然语言处理的基本单位不一定是“词”,也不一定是“句子”,而可能是“对语言结构进行操作的函数”。

例如:

FIND
MATCH
INSERT
DELETE
REPLACE
MOVE
COPY
COMBINE

复杂能力:

否定
    ↓
MODIFY

因果
    ↓
COMBINE

指代
    ↓
MATCH + COPY

改写
    ↓
FIND + REPLACE

摘要
    ↓
FIND + DELETE + COMBINE

翻译
    ↓
MATCH + REPLACE + MODIFY + REORDER

推理
    ↓
MATCH + COMBINE + MODIFY

这就产生一个非常漂亮的研究路线:

不是先设计“理解、推理、翻译、摘要”这些高级模块,而是先寻找最少的一组语言操作,然后证明高级能力能不能由它们组合出来。


十五、而且这非常适合你之前的“语义扩散”思路

可以进一步形成两层:

              自然语言
                  ↓
          ┌───────┴───────┐
          ↓               ↓
       结构节点          操作节点
          ↓               ↓
       语义网络       FIND / MATCH
          ↓          REPLACE / MOVE
          ↓          COPY / COMBINE
          └───────┬───────┘
                  ↓
             结构不断变化
                  ↓
              复杂理解

这样你甚至可以不依赖传统 Transformer 的 token→巨大向量→attention 这一条路线,而是研究一种:

“语言结构 + 局部匹配 + 基本操作 + 递归组合”的 NLP。

我觉得下一步最关键的不是继续增加函数,而是反过来做一件事:

把这 8 个函数压缩到可能的最小集合,然后拿 20~50 个典型语言现象逐个证明:它到底能不能由这些最基本操作组合出来。

如果能做到这一点,你就不只是“提出一种 NLP 算法”,而是在尝试寻找自然语言处理的操作公理系统

💬 留言 ⋮⋮

加载中…
💡 不登录也可留言(IP 限制:每文/每天各 1/10 条)

加载中…

纸张白
护眼绿
羊皮卷
夜间黑
100%