{"id":13436574,"url":"https://github.com/baidu/lac","last_synced_at":"2025-05-14T08:06:28.529Z","repository":{"id":37431926,"uuid":"139385800","full_name":"baidu/lac","owner":"baidu","description":"百度NLP：分词，词性标注，命名实体识别，词重要性","archived":false,"fork":false,"pushed_at":"2021-05-25T10:46:36.000Z","size":66706,"stargazers_count":3931,"open_issues_count":158,"forks_count":596,"subscribers_count":105,"default_branch":"master","last_synced_at":"2025-05-11T16:03:34.140Z","etag":null,"topics":["chinese-nlp","chinese-word-segmentation","java","lexical-analysis","named-entity-recognition","part-of-speech-tagger","python","word-segmentation"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/baidu.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-02T03:22:22.000Z","updated_at":"2025-05-09T04:12:29.000Z","dependencies_parsed_at":"2022-07-10T16:01:23.735Z","dependency_job_id":null,"html_url":"https://github.com/baidu/lac","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baidu%2Flac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baidu%2Flac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baidu%2Flac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baidu%2Flac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/baidu","download_url":"https://codeload.github.com/baidu/lac/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254101616,"owners_count":22014909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chinese-nlp","chinese-word-segmentation","java","lexical-analysis","named-entity-recognition","part-of-speech-tagger","python","word-segmentation"],"created_at":"2024-07-31T03:00:50.316Z","updated_at":"2025-05-14T08:06:23.518Z","avatar_url":"https://github.com/baidu.png","language":"C++","readme":"## 工具介绍\nLAC全称Lexical Analysis of Chinese，是百度自然语言处理部研发的一款联合的词法分析工具，实现中文分词、词性标注、专名识别等功能。该工具具有以下特点与优势：\n- **效果好**：通过深度学习模型联合学习分词、词性标注、专名识别任务，词语重要性，整体效果F1值超过0.91，词性标注F1值超过0.94，专名识别F1值超过0.85，效果业内领先。\n- **效率高**：精简模型参数，结合Paddle预测库的性能优化，CPU单线程性能达800QPS，效率业内领先。\n- **可定制**：实现简单可控的干预机制，精准匹配用户词典对模型进行干预。词典支持长片段形式，使得干预更为精准。\n- **调用便捷**：**支持一键安装**，同时提供了Python、Java和C++调用接口与调用示例，实现快速调用和集成。\n- **支持移动端**: 定制超轻量级模型，体积仅为2M，主流千元手机单线程性能达200QPS，满足大多数移动端应用的需求，同等体积量级效果业内领先。\n\n## 安装与使用\n在此我们主要介绍Python安装与使用，其他语言使用：\n- [C++](./c++/README.md)\n- [JAVA](./java/README.md)\n- [Android](./Android/README.md)\n\n### 安装说明\n代码兼容Python2/3\n- 全自动安装: `pip install lac`\n- 半自动下载：先下载[http://pypi.python.org/pypi/lac/](http://pypi.python.org/pypi/lac/)，解压后运行 `python setup.py install`\n- 安装完成后可在命令行输入`lac`或`lac --segonly`,`lac --rank`启动服务，进行快速体验。\n\n  \u003e 国内网络可使用百度源安装，安装速率更快：`pip install lac -i https://mirror.baidu.com/pypi/simple`\n\n### 功能与使用\n#### 分词\n- 代码示例：\n```python\nfrom LAC import LAC\n\n# 装载分词模型\nlac = LAC(mode='seg')\n\n# 单个样本输入，输入为Unicode编码的字符串\ntext = u\"LAC是个优秀的分词工具\"\nseg_result = lac.run(text)\n\n# 批量样本输入, 输入为多个句子组成的list，平均速率会更快\ntexts = [u\"LAC是个优秀的分词工具\", u\"百度是一家高科技公司\"]\nseg_result = lac.run(texts)\n```\n- 输出：\n\n```text\n【单样本】：seg_result = [LAC, 是, 个, 优秀, 的, 分词, 工具]\n【批量样本】：seg_result = [[LAC, 是, 个, 优秀, 的, 分词, 工具], [百度, 是, 一家, 高科技, 公司]]\n```\n\n#### 词性标注与实体识别\n- 代码示例：\n```python\nfrom LAC import LAC\n\n# 装载LAC模型\nlac = LAC(mode='lac')\n\n# 单个样本输入，输入为Unicode编码的字符串\ntext = u\"LAC是个优秀的分词工具\"\nlac_result = lac.run(text)\n\n# 批量样本输入, 输入为多个句子组成的list，平均速率更快\ntexts = [u\"LAC是个优秀的分词工具\", u\"百度是一家高科技公司\"]\nlac_result = lac.run(texts)\n```\n- 输出：\n\n\u003e每个句子的输出其切词结果word_list以及对每个单词的标注tags_list，其格式为（word_list, tags_list)\n```text\n【单样本】： lac_result = ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n])\n【批量样本】：lac_result = [\n                    ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n]),\n                    ([LAC, 是, 个, 优秀, 的, 分词, 工具], [nz, v, q, a, u, n, n])\n                ]\n```\n\n词性和专名类别标签集合如下表，其中我们将最常用的4个专名类别标记为大写的形式：\n\n| 标签 | 含义     | 标签 | 含义     | 标签 | 含义     | 标签 | 含义     |\n| ---- | -------- | ---- | -------- | ---- | -------- | ---- | -------- |\n| n    | 普通名词 | f    | 方位名词 | s    | 处所名词  | nw   | 作品名   |\n| nz   | 其他专名 | v    | 普通动词 | vd   | 动副词   | vn   | 名动词   |\n| a    | 形容词   | ad   | 副形词   | an   | 名形词   | d    | 副词     |\n| m    | 数量词   | q    | 量词     | r    | 代词     | p    | 介词     |\n| c    | 连词     | u    | 助词     | xc   | 其他虚词 | w    | 标点符号 |\n| PER  | 人名     | LOC  | 地名     | ORG  | 机构名   | TIME | 时间     |\n\n#### 词语重要性\n- 代码示例：\n```python\nfrom LAC import LAC\n\n# 装载词语重要性模型\nlac = LAC(mode='rank')\n\n# 单个样本输入，输入为Unicode编码的字符串\ntext = u\"LAC是个优秀的分词工具\"\nrank_result = lac.run(text)\n\n# 批量样本输入, 输入为多个句子组成的list，平均速率会更快\ntexts = [u\"LAC是个优秀的分词工具\", u\"百度是一家高科技公司\"]\nrank_result = lac.run(texts)\n```\n- 输出：\n\n```text\n【单样本】：rank_result = [['LAC', '是', '个', '优秀', '的', '分词', '工具'], \n                        [nz, v, q, a, u, n, n],[3, 0, 0, 2, 0, 3, 1]]\n【批量样本】：rank_result = [\n                    (['LAC', '是', '个', '优秀', '的', '分词', '工具'], \n                     [nz, v, q, a, u, n, n], [3, 0, 0, 2, 0, 3, 1]),  \n                    (['百度', '是', '一家', '高科技', '公司'], \n                     [ORG, v, m, n, n], [3, 0, 2, 3, 1])\n                ]\n```\n词语重要性各类别标签集合如下表，我们使用4-Level梯度进行分类：\n\n| 标签 | 含义       | 常见于词性|\n| ---- | --------  | ----   | \n| 0    | query中表述的冗余词   |  p, w, xc ...    | \n| 1    | query中限定较弱的词   |  r, c, u ...     | \n| 2    | query中强限定的词     |  n, s, v ...     | \n| 3    | query中的核心词       |  nz, nw, LOC ... | \n\n\n#### 定制化功能\n\n在模型输出的基础上，LAC还支持用户配置定制化的切分结果和专名类型输出。当模型预测匹配到词典的中的item时，会用定制化的结果替代原有结果。为了实现更加精确的匹配，我们支持以由多个单词组成的长片段作为一个item。\n\n我们通过装载词典文件的形式实现该功能，词典文件每行表示一个定制化的item，由一个单词或多个连续的单词组成，每个单词后使用'/'表示标签，如果没有'/'标签则会使用模型默认的标签。每个item单词数越多，干预效果会越精准。\n\n- 词典文件示例\n\n  \u003e 这里仅作为示例，展现各种需求情况下的结果。后续还将开放以通配符配置词典的模式，敬请期待。\n```text\n春天/SEASON\n花/n 开/v\n秋天的风\n落 阳\n```\n- 代码示例\n```python\nfrom LAC import LAC\nlac = LAC()\n\n# 装载干预词典, sep参数表示词典文件采用的分隔符，为None时默认使用空格或制表符'\\t'\nlac.load_customization('custom.txt', sep=None)\n\n# 干预后结果\ncustom_result = lac.run(u\"春天的花开秋天的风以及冬天的落阳\")\n```\n\n- 以输入“春天的花开秋天的风以及冬天的落阳”为例，原本输出结果为：\n```text\n春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n\n```\n- 添加示例中的词典文件后的结果为：\n\n```text\n春天/SEASON 的/u 花/n 开/v 秋天的风/n 以及/c 冬天/TIME 的/u 落/n 阳/n\n```\n\n#### 增量训练\n我们也提供了增量训练的接口，用户可以使用自己的数据，进行增量训练，首先需要将数据转换为模型输入的格式，并且所有数据文件均为\"UTF-8\"编码：\n\n##### 1. 分词训练\n\n- 数据样例\n\n  \u003e  与大多数开源分词数据集格式一致，使用空格作为单词切分标记，如下所示：\n\n```text\nLAC 是 个 优秀 的 分词 工具 。\n百度 是 一家 高科技 公司 。\n春天 的 花开 秋天 的 风 以及 冬天 的 落阳 。\n```\n\n- 代码示例\n\n```Python\nfrom LAC import LAC\n\n# 选择使用分词模型\nlac = LAC(mode = 'seg')\n\n# 训练和测试数据集，格式一致\ntrain_file = \"./data/seg_train.tsv\"\ntest_file = \"./data/seg_test.tsv\"\nlac.train(model_save_dir='./my_seg_model/',train_data=train_file, test_data=test_file)\n\n# 使用自己训练好的模型\nmy_lac = LAC(model_path='my_seg_model')\n```\n\n##### 2. 词法分析训练\n\n- 样例数据\n\n  \u003e 在分词数据的基础上，每个单词以“/type”的形式标记其词性或实体类别。值得注意的是，词法分析的训练目前仅支持标签体系与我们一致的数据。后续也会开放支持新的标签体系，敬请期待。\n\n```text\nLAC/nz 是/v 个/q 优秀/a 的/u 分词/n 工具/n 。/w\n百度/ORG 是/v 一家/m 高科技/n 公司/n 。/w\n春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n 。/w\n```\n\n- 代码示例\n```Python\nfrom LAC import LAC\n\n# 选择使用默认的词法分析模型\nlac = LAC()\n\n# 训练和测试数据集，格式一致\ntrain_file = \"./data/lac_train.tsv\"\ntest_file = \"./data/lac_test.tsv\"\nlac.train(model_save_dir='./my_lac_model/',train_data=train_file, test_data=test_file)\n\n# 使用自己训练好的模型\nmy_lac = LAC(model_path='my_lac_model')\n```\n\n文件结构\n---\n\n```text\n.\n├── python                      # Python调用的脚本\n├── c++                         # C++调用的代码\n├── java                        # Java调用的代码\n├── Android                     # Android调用的示例\n├── README.md                   # 本文件\n└── CMakeList.txt               # 编译C++和Java调用的脚本\n```\n\n## 在论文中引用LAC\n\n如果您的学术工作成果中使用了LAC，请您增加下述引用。我们非常欣慰LAC能够对您的学术工作带来帮助。\n\n```text\n@article{jiao2018LAC,\n\ttitle={Chinese Lexical Analysis with Deep Bi-GRU-CRF Network},\n\tauthor={Jiao, Zhenyu and Sun, Shuqi and Sun, Ke},\n\tjournal={arXiv preprint arXiv:1807.01882},\n\tyear={2018},\n\turl={https://arxiv.org/abs/1807.01882}\n}\n```\n\n贡献代码\n---\n我们欢迎开发者向LAC贡献代码。如果您开发了新功能，发现了bug……欢迎提交Pull request与issue到Github。\n","funding_links":[],"categories":["C++","Natural Language Processing","Chinese NLP Toolkits 中文NLP工具","人工智能","Uncategorized"],"sub_categories":["General Purpose NLP","Toolkits 综合NLP工具包","Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaidu%2Flac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbaidu%2Flac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaidu%2Flac/lists"}