将词合并到更小的向量维数中,以缓解维数灾难的问题,并可能为我们所用。当这些向量相互投影以确定向量对之间的距离时,这将是对它们语义相似性而不是统计性词用法的合理估计。这个向量距离度量方法称为余弦距离。我们甚至可以将这些向量投影到二维平面上,以便在图表中对它们进行观察,看我们的大脑能否从中找到某些模式。然后,我们就可以教计算机识别这些模式,并以反映产生这些向量的词的隐性含义的方式对其进行处理。
尽管我们确实会不断重复自己写过的东西,但仍然有太多的可能性。当这些词分别被视为单独的、不同的维度时,我们并不知道“Good morning Tom”和“Good Morgen Tom”其实具有相同的含义。我们需要为消息创建一些降维的向量空间模型,这样就可以用一组连续值来标记它们。我们可以根据主题和情感等特点对消息和文字进行评级。
这样,我们就可以考虑下面的问题:
这条消息有多大可能成为一个被提问的问题?
这条消息有多大可能是和人有关的?
这条消息有多大可能是关于我自己的?
这条消息听起来愤怒或高兴的程度有多高?
这条消息是否需要我做出回复?
想想我们能赋予语句的所有评级,我们可以把这些评级按照孙旭排列,然后为每条语句计算评级,从而为每条语句生成一个向量。我们能为一组语句给出的评级列表或维度应该比可能的语句数量小得多。意义相同的语句应该有相似的分值。
这些评级向量变成了机器可以编程进行回复的对象,我们可以通过对语句聚类(聚集)进一步简化和泛化向量,使它们在某些维度上接近,意义相同的语句应该有相似的分值。
计算机应该如何为这些向量的每一个维度赋值?我们可以把向量维度建简化成“它包含XX这个词吗”等问题。我们可以看到,这里可以提出100万个左右的问题,这就是计算机可以分配给一个短语的数值范围。这是第一个实际的向量空间模型,称为位向量语言模型,或者说是独热编码向量的求和结果。得益于计算机硬件的发展,NLP越来越实用,增长的常数内存、线性代数算法时机器破解自然语言编码的最后一块拼图。
还有一个更简单但更强大的表示法可以用于聊天机器人。如果我们的向量维度完全描述了字符的精确序列,比如包含以下问题的答案:“第一个字母是A吗?是B吗?...第二个字母是A吗?是B吗?...”等等。这个向量的优点是,它保留了原始文本中所包含的所有信息,包括字符和词的顺序。这种独热字符序列编码表示法主要用于精确记录和重放原始片段,而非编写新内容。在这种表示法下,比文档的原始ASCII编码表示还要常。为了保留每个字符序列的信息,文档表示的可能数量会爆炸。这里,我们虽然保留了字符和词的顺序,但是扩展了NLP问题的维度。
在上述基于字符的向量空间中,这些文档表示不能很好地通过聚类聚在一起。但是有一种方法,可以快速地找到这个空间下序列(字符串)之间的相似性。只使用这种简单的、机械的语言视图,莱文斯坦算法就能使创建一些超级有趣和有用的聊天机器人称为可能。但是,当我们想到如何将这些高维空间压缩/嵌入到具有模糊含义的低维空间得到所谓的主题向量时,就可以创建更密集、更有意义的语句和文档的向量表示。