중국어 어휘 분석(Lexical Analysis of Chinese)의 전체 이름인 LAC는 중국어 단어 분할, 품사 태깅, 고유명사 인식과 같은 기능을 실현하기 위해 바이두 자연어 처리 부서에서 개발한 공동 어휘 분석 도구입니다. 이 도구에는 다음과 같은 기능과 장점이 있습니다.
여기에서는 주로 Python의 설치와 사용, 그리고 다른 언어의 사용을 소개합니다.
Python2/3과 호환되는 코드
완전 자동 설치: pip install lac
반자동 다운로드: 먼저 http://pypi.python.org/pypi/lac/를 다운로드하고 압축을 풀고 python setup.py install
실행합니다.
설치가 완료되면 명령줄에 lac
또는 lac --segonly
또는 lac --rank
입력하여 서비스를 시작하여 빠른 경험을 할 수 있습니다.
국내 네트워크는 Baidu 소스 설치를 사용할 수 있으며 설치 속도가 더 빠릅니다.
pip install lac -i https://mirror.baidu.com/pypi/simple
from LAC import LAC
# 装载分词模型
lac = LAC ( mode = 'seg' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
seg_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
seg_result = lac . run ( texts )
【单样本】:seg_result = [LAC, 是, 个, 优秀, 的, 分词, 工具]
【批量样本】:seg_result = [[LAC, 是, 个, 优秀, 的, 分词, 工具], [百度, 是, 一家, 高科技, 公司]]
from LAC import LAC
# 装载LAC模型
lac = LAC ( mode = 'lac' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
lac_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
lac_result = lac . run ( texts )
각 문장의 출력은 단어 분할 결과 word_list와 각 단어의 태그 목록이며 형식은 (word_list, Tags_list)입니다.
【单样本】: lac_result = ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n])
【批量样本】:lac_result = [
([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n]),
([LAC, 是, 个, 优秀, 的, 分词, 工具], [nz, v, q, a, u, n, n])
]
품사 및 고유명사 범주 태그 세트는 다음과 같습니다. 여기서 가장 일반적으로 사용되는 4가지 고유명사 범주를 대문자로 표시합니다.
상표 | 의미 | 상표 | 의미 | 상표 | 의미 | 상표 | 의미 |
---|---|---|---|---|---|---|---|
N | 보통명사 | 에프 | 위치 명사 | 에스 | 장소 명사 | 뉴 | 작품 제목 |
뉴질랜드 | 기타 고유명사 | 다섯 | 일반 동사 | vd | 동사 부사 | vn | 명사 동사 |
에이 | 형용사 | 광고 | 부사 | 안 | 명사 | 디 | 부사 |
중 | 수량자 | 큐 | 수량자 | 아르 자형 | 대명사 | 피 | 전치사 |
기음 | 접속사 | 유 | 입자 | xc | 기타 기능어 | 승 | 구두 |
당 | 이름 | LOC | 지명 | ORG | 조직 이름 | 시간 | 시간 |
from LAC import LAC
# 装载词语重要性模型
lac = LAC ( mode = 'rank' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
rank_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
rank_result = lac . run ( texts )
【单样本】:rank_result = [['LAC', '是', '个', '优秀', '的', '分词', '工具'],
[nz, v, q, a, u, n, n],[3, 0, 0, 2, 0, 3, 1]]
【批量样本】:rank_result = [
(['LAC', '是', '个', '优秀', '的', '分词', '工具'],
[nz, v, q, a, u, n, n], [3, 0, 0, 2, 0, 3, 1]),
(['百度', '是', '一家', '高科技', '公司'],
[ORG, v, m, n, n], [3, 0, 2, 3, 1])
]
단어 중요도의 각 범주에 대한 레이블 집합은 다음과 같습니다. 분류를 위해 4단계 그라데이션을 사용합니다.
상표 | 의미 | 연설의 일부에서 흔히 볼 수 있는 |
---|---|---|
0 | 쿼리에 표현된 중복 단어 | 피, 승, xc ... |
1 | 쿼리의 자격이 약한 단어 | 아르, 씨, 너... |
2 | 쿼리의 강력한 자격을 갖춘 단어 | n, s, v... |
3 | 검색어의 핵심 단어 | 뉴질랜드, 뉴웨스트, LOC ... |
LAC는 또한 모델 출력에 기초하여 사용자가 맞춤형 분할 결과와 고유명칭 유형 출력을 구성할 수 있도록 지원합니다. 모델이 사전과 일치하는 항목을 예측하면 원래 결과를 사용자 정의된 결과로 대체합니다. 보다 정확한 매칭을 위해 여러 단어로 구성된 긴 조각을 항목으로 지원합니다.
사전 파일을 로드하여 이 기능을 구현합니다. 사전 파일의 각 줄은 하나의 단어 또는 여러 개의 연속 단어로 구성된 사용자 정의 항목을 나타내며 '/'가 없는 경우 각 단어 뒤에 사용됩니다. label 모델의 기본 레이블이 사용됩니다. 항목당 단어가 많을수록 개입 효과가 더 정확해집니다.
사전 파일 예
이는 다양한 요구사항에 따른 결과를 보여주기 위한 예시일 뿐입니다. 와일드카드로 사전을 구성하는 모드는 추후 오픈될 예정이니 많은 관심 부탁드립니다.
春天/SEASON
花/n 开/v
秋天的风
落 阳
from LAC import LAC
lac = LAC ()
# 装载干预词典, sep参数表示词典文件采用的分隔符,为None时默认使用空格或制表符't'
lac . load_customization ( 'custom.txt' , sep = None )
# 干预后结果
custom_result = lac . run ( u"春天的花开秋天的风以及冬天的落阳" )
春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n
春天/SEASON 的/u 花/n 开/v 秋天的风/n 以及/c 冬天/TIME 的/u 落/n 阳/n
또한 증분 훈련 인터페이스도 제공합니다. 사용자는 증분 훈련을 위해 자신의 데이터를 사용할 수 있습니다. 먼저 데이터를 모델 입력 형식으로 변환해야 하며 모든 데이터 파일은 "UTF-8"로 인코딩됩니다.
데이터 샘플
대부분의 오픈 소스 단어 분할 데이터 세트의 형식과 일치하여 아래와 같이 공백이 단어 분할 마커로 사용됩니다.
LAC 是 个 优秀 的 分词 工具 。
百度 是 一家 高科技 公司 。
春天 的 花开 秋天 的 风 以及 冬天 的 落阳 。
from LAC import LAC
# 选择使用分词模型
lac = LAC ( mode = 'seg' )
# 训练和测试数据集,格式一致
train_file = "./data/seg_train.tsv"
test_file = "./data/seg_test.tsv"
lac . train ( model_save_dir = './my_seg_model/' , train_data = train_file , test_data = test_file )
# 使用自己训练好的模型
my_lac = LAC ( model_path = 'my_seg_model' )
샘플 데이터
단어 분할 데이터를 기반으로 각 단어에 "/type" 형식으로 품사 또는 개체 범주가 표시됩니다. 현재 어휘 분석 교육은 레이블 시스템이 우리와 일치하는 데이터만 지원한다는 점은 주목할 가치가 있습니다. 향후 새로운 태그 시스템에 대한 지원도 오픈할 예정이니 지켜봐 주시기 바랍니다.
LAC/nz 是/v 个/q 优秀/a 的/u 分词/n 工具/n 。/w
百度/ORG 是/v 一家/m 高科技/n 公司/n 。/w
春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n 。/w
from LAC import LAC
# 选择使用默认的词法分析模型
lac = LAC ()
# 训练和测试数据集,格式一致
train_file = "./data/lac_train.tsv"
test_file = "./data/lac_test.tsv"
lac . train ( model_save_dir = './my_lac_model/' , train_data = train_file , test_data = test_file )
# 使用自己训练好的模型
my_lac = LAC ( model_path = 'my_lac_model' )
.
├── python # Python调用的脚本
├── c++ # C++调用的代码
├── java # Java调用的代码
├── Android # Android调用的示例
├── README.md # 本文件
└── CMakeList.txt # 编译C++和Java调用的脚本
학업에 LAC를 사용하는 경우 다음 인용을 추가하십시오. LAC가 귀하의 학업에 도움을 줄 수 있어서 매우 기쁩니다.
@article{jiao2018LAC,
title={Chinese Lexical Analysis with Deep Bi-GRU-CRF Network},
author={Jiao, Zhenyu and Sun, Shuqi and Sun, Ke},
journal={arXiv preprint arXiv:1807.01882},
year={2018},
url={https://arxiv.org/abs/1807.01882}
}
우리는 개발자들이 LAC에 코드를 기여하는 것을 환영합니다. 새로운 기능을 개발하고 버그를 발견했다면... Github에 풀 요청과 이슈를 제출하실 수 있습니다.