2015-11-15 22 views
5

Tôi có tài liệu có dữ liệu được gắn thẻ theo định dạng Hi here's my [KEYWORD phone number], let me know when you wanna hangout: [PHONE 7802708523]. I live in a [PROP_TYPE condo] in [CITY New York]. Tôi muốn đào tạo một mô hình dựa trên một tập hợp các loại tài liệu được gắn thẻ này và sau đó sử dụng mô hình của tôi để gắn thẻ các tài liệu mới. Điều này có thể thực hiện được trong NLTK không? Tôi đã xem các tập lệnh chunkingNLTK-Trainer nhưng chúng có tập hợp thẻ và tập hợp bị hạn chế trong khi tập dữ liệu của tôi có thẻ tùy chỉnh.Trình gắn thẻ đào tạo với thẻ tùy chỉnh trong NLTK

+0

thẻ BIO đoạn có vẻ là đúng hướng, xem http: //lingpipe-blog.com/2009/10/14/coding-chunkers-as-taggers-io-bio-bmewo-and-bmewo/. Phụ thuộc vào cách bạn mã hóa đầu vào của mình, bạn có thể cần một trình phân loại hạt mịn để gắn thẻ nhận dạng 'PHONE' hoặc' KEYWORD' sau khi chunking. – alvas

+0

Bạn có thể cung cấp thêm một vài ví dụ nữa không? Họ có phải là tất cả các số điện thoại không? Có thể thêm [thẻ: trích xuất thông tin]? – reynoldsnlp

+0

Không, dữ liệu đa dạng, bao gồm số điện thoại, địa chỉ, tên, ngày tháng, vv Đối với các thẻ đoạn BIO, có một số mẫu mã mà tôi có thể xem không? –

Trả lời

1

Sự cố bạn đang tìm cách giải quyết được gọi là phổ biến nhất, Named Entity Recognition (NER). Có rất nhiều thuật toán có thể giúp bạn giải quyết vấn đề, nhưng khái niệm quan trọng nhất là bạn cần phải chuyển đổi dữ liệu văn bản của bạn thành một định dạng phù hợp cho các trình gắn thẻ chuỗi. Dưới đây là một ví dụ về định dạng BIO:

I  O 
love O 
Paris B-LOC 
and O 
New B-LOC 
York I-LOC 
.  O 

Từ đó, bạn có thể chọn để đào tạo bất kỳ loại phân loại, chẳng hạn như Naive Bayes, SVM, Maxent, CRF, vv Hiện nay các thuật toán phổ biến nhất đối với đa như vậy nhiệm vụ phân loại chuỗi liên tiếp là CRF. Có các công cụ có sẵn cho phép bạn đào tạo mô hình BIO (mặc dù ban đầu được dự định để chunking) từ một tệp bằng định dạng được hiển thị ở trên (ví dụ: YamCha, CRF++, CRFSuite, Wapiti). Nếu bạn đang sử dụng Python, bạn có thể xem xét scikit-learn, python-crfsuitePyStruct ngoài NLTK.

+1

Hộp công cụ NLTK sử dụng định dạng ba cột: 'từ POS-tag BIO-tag'. Sẽ không đau khi thêm bước gắn thẻ POS vào đường ống xử lý. – alexis

4

Như @AleksandarSavkov đã viết, đây thực chất là nhiệm vụ nhận dạng đối tượng được đặt tên (NER)-- hoặc thường là một nhiệm vụ chunking, như bạn đã nhận ra. Làm thế nào để làm điều đó được bao phủ độc đáo trong chapter 7 của cuốn sách NLTK. Tôi khuyên bạn nên bỏ qua các phần về gắn thẻ regexp và sử dụng cách tiếp cận trong phần 3, Developing and evaluating chunkers. Nó bao gồm các mẫu mã bạn có thể sử dụng nguyên văn để tạo ra một đoạn chunker (ConsecutiveNPChunkTagger). Trách nhiệm của bạn là chọn các tính năng sẽ mang đến cho bạn hiệu suất tốt.

Bạn cần phải chuyển đổi dữ liệu của mình sang định dạng IOB theo kiến ​​trúc của NLTK; nó mong đợi một phần của thẻ bài phát biểu, do đó, bước đầu tiên nên được để chạy đầu vào của bạn thông qua một thẻ tag POS; nltk.pos_tag() sẽ thực hiện một công việc đủ phong nha (khi bạn loại bỏ đánh dấu như [KEYWORD ...]) và không yêu cầu cài đặt thêm phần mềm nào. Khi corpus của bạn có định dạng sau (từ - POS-tag - IOB-tag), bạn đã sẵn sàng để đào tạo một trình nhận dạng:

Hi NNP O 
here RB O 
's POS O 
my PRP$ O 
phone NN B-KEYWORD 
number NN I-KEYWORD 
, , O 
let VB O 
me PRP O 
... 
+0

Cảm ơn, tôi không rõ về bước sau khi chạy đầu vào của tôi thông qua trình gắn thẻ POS. Làm cách nào để chèn các thẻ tùy chỉnh của riêng tôi? Có lẽ tôi hiểu lầm những gì bạn có nghĩa là bằng cách loại bỏ các đánh dấu như 'KEYWORD' –

+1

Tôi chỉ nhìn thấy bình luận của bạn ... phản ứng này gần như là bình luận của bạn, xin lỗi! Những gì tôi có nghĩa là "tước bỏ đánh dấu" là POS tagger làm việc với văn bản gốc tokenized; bạn sẽ cần phải loại bỏ các nhãn chunk từ kho văn bản của bạn, tokenize và tag văn bản với NLTK, sau đó chèn các khối một lần nữa (mà bạn cũng có thể làm trong định dạng IOB, vì đó là những gì bạn sẽ cần cuối cùng). Nếu bạn vẫn không biết làm thế nào để làm điều này, tôi có thể chỉnh sửa câu trả lời của tôi để giải thích thêm. – alexis

+0

Cảm ơn, điều đó giúp ích. Vì vậy, đầu ra cuối cùng sẽ là một danh sách của 'từ POS-tag Custom-tag', phải không? –

Các vấn đề liên quan