法律行业的开源NLP——LexNLP探析

发布日期:2020年01月11日 11:58

这个话题原本是用来写CS410的technology review的,由于当时时间仓促,而且这项作业是complete/incomplete评分,所以我对这个工具的背景、和性能表现没有进行深入探究。在这里我对它进行进一步研究,把结果分享在这里。

LexNLP到底是什么

NLP发展到今天,已经深度涉及了许多专业领域,进而衍生出专属于这个领域的NLP包。比如在医学行业,medical/clinical NLP已经较为完善,很多开源的NLP工具可以完成诸如信息提取、搜索、乃至翻译等工作。NLP在金融领域也有较为成熟和丰富的产品。

在法律领域,情况就让人有点困惑。从本质上来说,法律行业是一个以文本为中心的行业,这自然给了NLP广泛的发展空间。使用NLP可以大大减少文档审阅、整理、起草等方面人力,自然对这方面的工具有很大的需求。但要说到NLP在法律领域的落地应用,相关资料却是少之又少。虽说现在律所都在(声称)推广legal technology,但大部分所谓的legal technology似乎集中在billing等边缘工作(毕竟传统意义上的自动化对于律所来说已经是个新鲜事物)。真正由人工智能做文本处理——这一核心业务,反倒没有成为一个关注焦点。

LexNLP在这种背景下应运而生。LexNLP是elevate公司制作的开源NLP包,核心组件是Stanford CoreNLP。除此之外,LexNLP声称利用大量的法律数据库(例如U.S. Securities and Exchange Commission的EDGAR database)pre-train了自己的模型,使得模型能够胜任法律专业术语的处理。由于LexNLP是开源的,可想而知很多公司和律所可以基于LexNLP开发自己的NLP产品。在这个方面,NLP不仅是先行者,到现在也是独此一家。

LexNLP能做什么

根据官方在2018年发布的论文,LexNLP能完成的工作大概可以分为三个方面。首先是传统意义上的NLP,包括segmentation、part of speech tagging、tokenization和lemmatization等等。LexNLP宣称对于法律文体做了优化,比如能判断“legal stopwords”、collocations等等。前面说到LexNLP基于Stanford CoreNLP,所以LexNLP同时提供了直接调用Stanford CoreNLP的接口。也就是说,用户可以直接用Stanford CoreNLP的API来完成这些任务(不过论文里并不鼓励这么做)。

第二个方面是information extraction。法律文书里有大量的实体名称(entity name)、地址、日期、大小关系、版权、定义、数额、逻辑关系(例如more than、least of)等等。LexNLP可以很方便地从文档中提取出来这些信息。

第三个方面是text classification。LexNLP使用doc2vec来给文档分类,主要是判断其是不是合同,以及属于哪一类的合同(confidentiality、employment、non-compete等等)。同时LexNLP也可以完成语句及段落级别的分类,例如判断合同中的一部分属于哪一类的条款。

除此之外,LexNLP的文档中还说LexNLP支持feature generation,从而为更深度的NLP提供素材。

LexNLP做的怎么样

我把LexNLP的代码clone到本地,简单测试了一下它目前的性能表现。前面说过我这里没有应用背景,所以有时难免感到隔靴搔痒,它在工业界的表现需要更加全面的测试。但这个初步探究应该能提供一些思路,以及让我们了解它大概的发展情况。

首先先看一下这个项目包含的”legal stopwords”。在lexnlp/nlp/en/下面有若干pickle文件。unpickle之后,可以看到他们的pre-train出来的stopwords和collocation。

stopwords.pickle

这些stopwords似乎是普通文本里常见的stopwords,并没有看出来论文中所成的legal在何处。当然也可能是因为这里面的一些词在法律文书里的TF-IDF使得他们更应该被忽略(我能想到的是against, that’ll之类,但看上去也符合普通stopwords的定义)。

在这个bigram-collocation-10000中,我们终于看到了很多属于法律领域的bigram。不过可以看到还是存在着很多干扰项(这已经是截取了较为完善的一屏了),从而看出他们pretrain的结果还有很大的进步空间。

接下来实验一下information extraction。LexNLP说其可以提取文书中的实体名称——恰好Named Entity Recognition(NER)在广义的NLP中也是一个重要的应用。我在这里用一个短短的preamble进行测试。

这里,LexNLP成功辨认出了公司名All Sport, Inc.以及人名Mary F. Patterson,却把Kenosha, WI当做了人名。用其他数据组测试的时候,我还遇到了把”Client”当人名的情况。不过整体而言对于这个Preamble片段,LexNLP的表现还是尚可,没有出现太多张冠李戴的情况。

这位博主使用了一个完整的exhibit进行测试,可以看出LexNLP在NER方面的结果不如Azure Machine Learning Studio的NLP模块,在precision和recall方面均逊色于后者。

结论

LexNLP显然对于法律文书做过一定优化,其pre-train在collocation以及对实体名称的辨析上也有所体现。但其表现还不足以使得其成为生产力工具,尤其是很多方面还出现了不如通用NLP的情况。

本文的英文版将会很快发在我的英文站上。目前英文站还在建设中。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注