스페이스로 고유의 표현 추출하기 [머신러닝 지식 0도 이해]
spacy는 자연 언어로 처리된 많은 작업을 통합한 프로그램 라이브러리입니다.
예를 들면, 이런 일을 할 수 있다.
(물론 자신만의 독특한 학습 데이터로 모델을 만들 수도 있다.)
간단한 심도 있는 학습으로 자연스러운 언어 처리를 하고 싶은 사람에게는 매우 편리하다!
그나저나 스페이스의 v2.2과까지 일본어를 다 배우지 못한 패턴.
따라서 일본어를 해석하기 위해서는 학습 데이터를 준비할 필요가 있다.
(또는 GiNZA라는 이름의spacy의 파생 라이브러리를 사용해야 함)
v2.3과부터 일본어 학습 완료 모드를 도입했기 때문에 스페이스로 일본어 데이터를 단일체로 분석할 수 있습니다!
환경 구조
환경 사용을 확인합니다Colaboratory.
Colaboratory는 구글에서 제공하는 무료pyton 실행 환경입니다.
jupter 인터페이스를 통해 조작할 수 있어 기계 학습 라이브러리의 검증과 데이터 분석에 매우 편리하다.
spacy 설치
Colaboratory는 기본적으로spacy가 있지만 버전은 2.2 계열(2021/05월 시점)이다.
학습한 일본어 모델을 사용할 때는 2.3 시스템 이상을 설치해야 합니다.
# このコマンドで、2.2系が消えて3.0.6が入る
%%bash
pip install spacy==3.0.6
학습 모드 설치
다 배우는 모델은 대·중소 세 가지가 있다.
이번에는
ja_core_news_sm
,ja_core_news_md
두 개를 사용합니다.%%bash
python -m spacy download ja_core_news_sm
python -m spacy download ja_core_news_md
고유 표현 추출
나는 본 문제의 고유한 표현을 추출하고 있다.
시작하기 전에 아래에서 매크로 패키지를 다시 불러오십시오.
import pkg_resources, imp
imp.reload(pkg_resources)
상기 처리를 통해 설치된 모델을 읽을 수 있다.그럼 설치된 모형으로 고유의 표현을 뽑아 보세요.
import spacy
# モデルのロード
nlp = spacy.load("ja_core_news_md")
# 解析対象のテキストa
input_text = "2018年の8月に旅行にフランスへ旅行に行った。ルーヴル美術館でモナ・リザの絵を見た。"
# モデルに解析対象のテキストを渡す
doc = nlp(input_text)
# 固有表現を抽出
for ent in doc.ents:
print(ent.text, ent.label_, ent.start_char, ent.end_char)
# out -->
## 2018年 DATE 0 5
## 8月 DATE 6 8
## フランス GPE 12 16
## ルーヴル美術館 ORG 24 31
이게 다야.아주 적은 코드로 결과를 낼 수 있다.다음은 모형을
ja_core_news_md
로 바꾸어 봅시다.import spacy
# モデルのロード
nlp = spacy.load("ja_core_news_md")
# 解析対象のテキストa
input_text = "2018年の8月に旅行にフランスへ旅行に行った。ルーヴル美術館でモナ・リザの絵を見た。"
# モデルに解析対象のテキストを渡す
doc = nlp(input_text)
# 固有表現を抽出
for ent in doc.ents:
print(ent.text, ent.label_, ent.start_char, ent.end_char)
# out -->
## 2018年 DATE 0 5
## 8月 DATE 6 8
## フランス GPE 12 16
## ルーヴル美術館 ORG 24 31
## モナ・リザ PERSON 32 37
새로 발견된'모나리자'는 인명으로 추출할 수 있다.모델 크기에 비례해 고유한 표현의 변주곡을 늘리고 싶습니다.
더 많은 변화의 데이터를 얻고 싶을 때
ja_core_news_lg
를 쓰면 된다.추출 결과를 시각화할 수도 있습니다.
from spacy import displacy
displacy.render(doc, style="ent", jupyter=True)
블로그나 발표 등에 대한 설명은 편리할 것 같다.
상하문에 따라 추출 결과가 달라질까요?
결론을 보면 추출 결과는 상하문에 다소 의존한다.
import spacy
nlp = spacy.load("ja_core_news_sm")
input_text = "川崎へ行く"
#
# 「川崎」がGPE(地名)として抽出される
#
doc = nlp(input_text)
for ent in doc.ents:
print(ent.text, ent.label_, ent.start_char, ent.end_char)
# out -> 川崎 GPE 0 2
import spacy
nlp = spacy.load("ja_core_news_sm")
input_text = "川崎さんの家"
#
# 「川崎」がPERSON(人物)として抽出される
#
doc = nlp(input_text)
for ent in doc.ents:
print(ent.text, ent.label_, ent.start_char, ent.end_char)
# out -> 川崎 PERSON 0 2
에서 추출할 수 있는 고유의 표현은 같지만 라벨은 다르다.글 첫머리에서 설명한 바와 같이 스페이스의 학습 완료 모델은 CNN을 기반으로 한 모델이다.
CNN 기반 모델은 연속성을 고려한 학습에 적합하지 않기 때문에 컨텍스트와 추출 결과에 대한 의존도가 낮아 다소 의외다.
그나저나 RNN은 연속된 정보를 설명하는 효과적인 수단으로 유명하다.
CNN과 RNN의 차이는 참고할 수 있으니 관심 있는 사람은 보세요.
총결산
스페이스를 사용한다면 고유표현 추출 임무를 간단하게 수행하는 방법을 적었습니다.
spacy는 고유의 추출 표현 외에도 많은 자연 언어 처리 임무를 쉽게 테스트할 수 있다.
관심 있으신 분들은 꼭 참고해주세요!
Reference
이 문제에 관하여(스페이스로 고유의 표현 추출하기 [머신러닝 지식 0도 이해]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yagiyuki/articles/spacy_ner_ja텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)