首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Vowpal Wabbit进行命名实体识别似乎可以记忆训练数据。

使用Vowpal Wabbit进行命名实体识别似乎可以记忆训练数据。
EN

Stack Overflow用户
提问于 2017-04-19 08:31:13
回答 1查看 589关注 0票数 2

我正在使用Vowpal Wabbit的python来训练命名的实体识别分类器,以从短句子中检测人员、组织和位置的名称。我编制了一个IPython笔记本,详细说明了数据、模型是如何培训的,以及评估语句中识别的实体。培训数据来自阿提斯CONLL 2003数据集。

我的Vowpal Wabbit SearchTask类的设置(基于本教程):

代码语言:javascript
运行
复制
class SequenceLabeler(pyvw.SearchTask):
    def __init__(self, vw, sch, num_actions):
        pyvw.SearchTask.__init__(self, vw, sch, num_actions)

        sch.set_options( sch.AUTO_HAMMING_LOSS | sch.AUTO_CONDITION_FEATURES )

    def _run(self, sentence):
        output = []
        for n in range(len(sentence)):
            pos,word = sentence[n]
            with self.vw.example({'w': [word]}) as ex:
                pred = self.sch.predict(examples=ex, my_tag=n+1, oracle=pos, condition=[(n,'p'), (n-1, 'q')])
                output.append(pred)
        return output

示范培训:

代码语言:javascript
运行
复制
vw = pyvw.vw(search=num_labels, search_task='hook', ring_size=1024)
#num_labels = 3 ('B'eginning entity, 'I'nside entity, 'O'ther)

sequenceLabeler = vw.init_search_task(SequenceLabeler)    
sequenceLabeler.learn(training_set)

该模型在训练数据中显示的命名实体(精确的字符串匹配)上表现很好,但是对于使用相同结构的新示例来说,效果很差。也就是说,分类器将从训练数据中识别句子中的实体,但当我只更改名称时,它们的表现就很差。

代码语言:javascript
运行
复制
sample_sentences = ['new york to las vegas on sunday afternoon', 
                    'chennai to mumbai on sunday afternoon',
                    'lima to ascuncion on sunday afternoon']

当运行分类器时它的输出:

代码语言:javascript
运行
复制
new york to las vegas on sunday afternoon
locations - ['new york', 'las vegas']

chennai to mumbai on sunday afternoon
locations - []

lima to ascuncion on sunday afternoon
locations - []

这表明,即使句子保持不变:“周日下午a to b”,但该模型无法识别新的位置,可能是因为它已经记住了培训示例?

同样的结果也适用于organisationperson分类器。这些可以在我的Github中找到。

我的问题是-

  1. 我在这里做错了什么?
  2. 模型中是否有其他我可以改变的参数?或者我可以更好地使用现有的方法,如ring_sizesearch_task
  3. 你有什么建议可以提高模型的通用性吗?
EN

回答 1

Stack Overflow用户

发布于 2017-04-19 19:32:58

  1. 您没有使用地名录,没有口象特征(例如--spelling--affix),您的数据都是低精度的,所以唯一能帮助您的功能是单字和双字元标识。难怪你的训练数据过份了。理论上,您可以使用人工命名实体来增加您的训练数据,这些实体遵循模式(周日为x到y),但是如果这能提供帮助,那么构建一个基于规则的分类器就更容易了。
  2. 有许多参数,如-l (学习率)和--passes (学习率)。请参阅教程选项清单。请注意,ring_size并不影响预测质量,您只需将其设置得足够高,就不会收到任何警告(即高于最长序列)。
  3. 见1
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43490440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档