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

时间:2015-06-12 05:36:56

标签: vector nlp word2vec

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

5 个答案:

答案 0 :(得分:43)

1)Skip gram方法:paper here以及使用它的工具google word2vec

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

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

4)虽然这个paper没有形成句子/段落向量,但这样做很简单。可以插入单个单词向量(Glove word vectors被发现以提供最佳性能),然后可以形成整个句子/段落的向量表示。

5)使用CNNsummarize个文档。

答案 1 :(得分: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))

答案 2 :(得分:15)

一种解决方案,虽然你有一个特定的东西可以尝试做,但在准确性方面稍微差一点,但可能难以击败:

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

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

答案 3 :(得分:13)

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

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

  

素食主义者吃蔬菜。

V_s

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

V(sentence)

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

  蔬菜吃素食者。

通过语料库处理学习树结构,在分布式方面有很多研究。例如:Parsing With Compositional Vector Grammars。这个video也解释了这种方法。

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

答案 4 :(得分:0)

希望您欢迎实施。在尝试了许多其他解决方案之后,我坚持要使工作变得更轻松的实现,在转换影片图进行分析时也遇到了类似的问题。代码片段附在下面。

following link.

安装'spaCy'
import spacy
nlp = spacy.load('en')
doc = nlp(YOUR_DOC_HERE)
vec = doc.vector

希望这会有所帮助。