最近在做NLP的一些工作。
遇到的问题是:Precisely detect scenario/weather/time/etc in a paragraph-level document.
对于这个问题,我作为一个NLP外行,首先想到的思路是建立相应的词表,然后对每一个Sentence进行Tagging。在完成Coding的工作后,在测试中效果还是可以的(毕竟用Word2Vec聚类建立了好大一份词表)。但主要的问题是Overtrigger,这个模型无法区分那些地方才是真正描述Target的,更无法理解一词多义的情况。
于是在第一版模型可以基本Cover住下游业务需求之后,我Mentor对Precision有了进一步的要求(手动GG)。
在想了好几天之后(其实主要时间都用来划水),我想了一个不太成熟的方案,先记下来等元旦过完了回来再和Mentor讨论一下:
- 使用TF-IDF-Based Sequenced List取代完整的Word Segment List。
- 使用BERT取代Word2vec进行Word Embedding。
- 尝试使用Latent Semantic Analysis,进行第一轮无监督学习,总而获取到Sentence-level的Tagging information(说到底,还不是因为没有Labeler)。
- 使用SVD左矩阵反推Word-level Influence Factor,生成NER training data(这一步的话,为了保证模型质量,估计还是得请Labeler帮忙看一下。这个样子的话,比从什么都没有标注要轻松一些)。
- 尝试双向LSTM训练隐含序列,或者直接通过BERT Pre Trained Model 产出Word Embedding(反正BERT的Embedding是自带Context的,啦啦啦)。
- 使用线性链的条件随机场进行Sequence Tagging。这一步的话,参考目前的NER模型,在Location/Person/Organization上有95+的F1
如果这几个流程可以按照预期来进行的话,那效果应该还是不错的。