如何训练我自己的中国NER模型

时间:2017-05-23 06:45:29

标签: stanford-nlp named-entity-recognition

我正试图通过提到的https://nlp.stanford.edu/software/crf-faq.html训练我自己的中国NER模型。我将数据转换为每行一个中文字符,并在字符后标记实体,它喜欢:

  

红ORG

     

帽ORG

     

首O

     

席O

     执行O

     

行O

     

官O

     

Jim PERSON

     怀特赫斯特人

     

曾O

     

表O

     

示O

     

,O

     

亚ORG

     

马ORG

     

逊ORG

     

公O

     

共O

     

云O

     

有O

     

许O

     

多O

...

使用命令Range后,它最终生成了classfier(chinese.misc.distsim.crf.ser.gz)。然后我检查了classfier它如何在带注释的测试数据上工作,我使用命令Content-Range,它似乎工作。

但是当我使用命令java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop tech.prop通过文本段落检查分类器而不是注释的测试数据时,似乎分类器没用,它不识别单词分段的中文。

我训练新的中国NER模型时有什么问题吗? 我认为一个可能的问题是我将训练数据转换为每行一个汉字。事实上在中文中,一个汉字不是中文单词,我应该使用单词分段的中文训练数据,并将数据转换为每行一个中文单词,然后标记中文单词而不是中文单词。

1 个答案:

答案 0 :(得分:0)

可能对处理不同类型的文本输入有用的标志是:

import json
import base64
import urllib.request

personal_access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

headers = {}
headers['Content-type'] = "application/json"
headers['Authorization'] = b'Basic ' + 
base64.b64encode(personal_access_token.encode('utf-8'))

instance = "mycompany.visualstudio.com"
project = "MyProject"
repository ="MyRepository"
pullrequest = "3468"
api_version = "3.0"

repositories_url = ("https://%s/DefaultCollection/%s/_apis/git/repositories?
api-version=%s" % (instance, project, api_version))
print(repositories_url)

request = urllib.request.Request(repositories_url, headers=headers)
opener = urllib.request.build_opener()
response = opener.open(request)
print(response.read())

这也可能有用: https://stanfordnlp.github.io/CoreNLP/human-languages.html

除此之外,您还应该看看SeqClassifierFlags中的中文分词功能。