我相信您在第三点中的意思是“两个实体之间的词袋”。词袋模型创建不考虑词序的向量,并考虑语料库的整个词汇量。每个词的出现频率被用作训练分类器的特征。
适应你的例子:
Sentence 1: "Mike is the owner of the company called, Spark."
Sentence 2: "Denis owns the black building called Halo"
从这两个句子中,词汇表如下,假设停用词(即 the、is、of 等)已被删除,并且您将句子拆分为单独的标记:
vocabulary = {owner, company, called, owns, black, building}
然后您可以使用每个单词的原始频率(注意:您还可以应用更复杂的测量方法,例如 TF-IDF):
Sentence 1: {1, 1, 1, 0, 0, 0}
Sentence 2: {0, 0, 1, 1, 1, 1}
您可以通过应用词形还原技术来降低向量的维度,例如将动词简化为词根形式。这可以在 Python NLTK 中完成:
>>> from nltk.stem.wordnet import WordNetLemmatizer
>>> lmtzr = WordNetLemmatizer()
>>> lmtzr.lemmatize("owns","v")
u'own'
>>> lmtzr.lemmatize("owned","v")
u'own'
“v”表示与每个单词相关联的词性 (PoS) 标签,在本例中是动词。您还可以使用 NTLK 获取句子的 PoS-tags:
>>> s = "Denis owns the black building called Halo"
>>> tokens = nltk.word_tokenize(s)
>>> print nltk.pos_tag(tokens)
>>> [('Denis', 'NNP'), ('owns', 'VBZ'), ('the', 'DT'), ('black', 'JJ'),('building', 'NN'), ('called', 'VBN'), ('Halo', 'NNP')]
应用词干技术:
vocabulary = {own, company, called, black, building}
我相信他们在论文中提到的单词序列是相似的,但是你提取的是标记序列,而不是简单的标记,这也称为 n-gram。
请注意,您还可以设置一个特征(即特征向量中的一个维度),它是一个字符串,其中包含两个实体之间的单词序列或 PoS 标记。
您能否准确指出您提到的论文或论文,这可能会有所帮助
进一步澄清答案。
另外,请检查:
UTD: Classifying Semantic Relations by Combining Lexical and Semantic Resources
在 SemEval-2010 Task 8 关于名词之间语义关系的多路分类中取得了最好的结果。他们列出了 45 种不同的功能,可以为您的工作提供灵感。