如何将句子或文档转换为向量?

Sah*_*hil 49 nlp vector word2vec

我们有用于将单词转换为向量的模型(例如word2vec模型).是否存在将句子/文档转换为向量的类似模型,可能使用为单个单词学习的向量?

Azr*_*ael 43

1)Skip gram方法:这里纸张和使用它的工具google word2vec

2)使用LSTM-RNN形成句子的语义表示.

3)句子和文件的表示.段落向量在本文中介绍.它基本上是一种无监督算法,它从可变长度的文本片段(例如句子,段落和文档)中学习固定长度的特征表示.

4)虽然本文没有形成句子/段落向量,但这样做很简单.可以插入单个单词向量(找到Glove 单词向量以提供最佳性能),然后可以形成整个句子/段落的向量表示.

5)使用CNN总结文档.


alv*_*vas 17

这完全取决于:

  • 你正在使用哪种矢量模型
  • 该模型的目的是什么?
  • 将词向量组合成文档向量的创造力

如果您使用Word2Vec生成模型,则可以尝试:

或者你可以做一些人做的事情,即汇总文件中的所有内容词并除以内容词,例如https://github.com/alvations/oque/blob/master/o.py#L13(注意:行17-18是减少噪音的黑客攻击):

def sent_vectorizer(sent, model):
    sent_vec = np.zeros(400)
    numw = 0
    for w in sent:
        try:
            sent_vec = np.add(sent_vec, model[w])
            numw+=1
        except:
            pass
    return sent_vec / np.sqrt(sent_vec.dot(sent_vec))
Run Code Online (Sandbox Code Playgroud)

  • 用最多的单词跳过最终结果将不会使向量标准化.最好将它除以向量的大小:`sent_vec/np.sqrt(sent_vec.dot(sent_vec))` (2认同)

lar*_*ars 15

现成的解决方案稍微少一点,但如果您有特定的事情要做,可能在准确性方面难以击败:

构建一个RNN(使用LSTM或GRU存储单元,在此比较)并优化您要完成的实际任务的错误功能.你喂它的句子,并训练它产生你想要的输出.在输入你的句子之后激活网络是句子的表示(尽管你可能只关心网络输出).

您可以将句子表示为一个热门编码字符序列,一个热门编码字序列,或一个字向量序列(例如GloVeword2vec).如果你使用单词向量,你可以保持反向传播到单词向量,更新它们的权重,这样你也可以获得专门为你正在进行的任务调整的自定义单词向量.

  • 当您有大量标记数据进行受监督的RNN培训时,这是一个很好的解决方案.如果您有大量未标记的数据,我宁愿在整个数据集上进行无监督的PV嵌入.然后对较小的标记训练集进行逻辑回归训练. (2认同)

Meh*_*hdi 14

有很多方法可以回答这个问题.答案取决于你对短语和句子的解释.

这些分布式模型(例如word2vec为每个单词提供向量表示)只能显示单词通常如何在与其他单词相关的基于窗口的上下文中使用.基于对上下文 - 单词关系的这种解释,您可以将句子中所有单词的平均向量作为句子的向量表示.例如,在这句话中:

素食主义者吃蔬菜.

V_S

我们可以将归一化向量作为向量表示:

V(句子)

问题在于句子的组成性质.如果你采用上面的平均单词向量,这两个句子具有相同的向量表示:

蔬菜吃素食主义者.

通过语料库处理学习树结构的分布式方法有很多研究.例如:解析与组合矢量语法.这段视频也解释了这种方法.

我想再次强调解释.这些句子向量可能在您的应用程序中有其自己的含义.例如,在斯坦福大学这个项目的情感分析中,他们寻求的意思是句子的正面/负面情绪.即使你找到一个句子的完美向量表示,也有哲学辩论,如果你不能判断真实条件,这些不是句子的实际意义(David Lewis"General Semantics"1970).这就是为什么有一些专注于计算机视觉的作品(本文本文).我的观点是它完全取决于你的应用和向量的解释.