如何为SVM构建关系提取功能?

时间:2016-05-09 17:05:13

标签: nlp nltk information-extraction

感兴趣的领域:信息提取

这对我来说是一个新手,我试图理解如何设计功能(无论是词汇还是语义),以便学习信息提取中的关系。

从论文中,在两个命名实体之间的关系中采取监督学习特征的一个简单步骤是

* The sequence of words between the two entities
* the part of speech tags of these words
* bag of words between the two words

两个实体之间的单词数量是否应根据您正在查看的训练句而改变?那么,如何构建尺寸不一致的特征向量?

例如,请参阅以下两句话来了解有关系的人和组织:一个人的所有者。

1. Mike is the owner of the company called, Spark.
2. Denis owns the black building called Halo.

对于示例1,Mike和Spark之间的单词数是[is,the,owner,of,company,called],它们是7个特征词,而对于示例2,我们有[拥有, ,黑色,建筑,称为5个特征词。

我在哪里误解了这个问题? 谢谢!

1 个答案:

答案 0 :(得分:2)

我相信你的意思是“两个实体之间的话语”。在第3点。词袋模型创建了无视词序的向量,并考虑了语料库的整个词汇。每个单词的出现频率用作训练分类器的特征。

适应你的例子:

Sentence 1: "Mike is the owner of the company called, Spark."
Sentence 2: "Denis owns the black building called Halo"

从这两个句子中,词汇表如下,假设删除了停用词(即,是,等等),并将句子拆分为单个标记:

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标签:

>>> 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任务8上获得了关于名义之间语义关系的多路分类的最佳结果。他们列出了45种不同的功能,可以作为您工作的灵感。