Trích xuất từ ​​khóa từ dataframe python

Tôi đã tích cực làm việc để tìm một thuật toán hợp lệ cho tác vụ trích xuất từ ​​khóa. Mục tiêu là tìm một thuật toán có khả năng trích xuất từ ​​khóa một cách hiệu quả, cân bằng giữa chất lượng trích xuất và thời gian thực hiện, vì kho dữ liệu của tôi đang tăng lên hàng triệu hàng một cách nhanh chóng. Một trong những KPI là trích xuất các từ khóa luôn có ý nghĩa một mình, ngay cả khi nằm ngoài ngữ cảnh

Điều này khiến tôi thử nghiệm và thử nghiệm với một số cơ chế trích xuất từ ​​khóa nổi tiếng. Đây là tôi chia sẻ hành trình nhỏ của tôi với bạn

thư viện

Tôi đã sử dụng các thư viện sau để tiến hành nghiên cứu

  • NLTK, để giúp tôi trong các giai đoạn tiền xử lý và một số chức năng của trình trợ giúp
  • CÀO
  • YẾU
  • PKE
  • keyBERT
  • Spacy

Pandas và Matplotlib, cùng với các thư viện chung nhưng cốt lõi khác cũng được sử dụng

Cấu trúc của thí nghiệm

Cách điểm chuẩn hoạt động như sau

Các bước đánh giá hiệu quả công việc. Hình ảnh của tác giả

Trước tiên, chúng tôi sẽ nhập tập dữ liệu chứa dữ liệu văn bản của chúng tôi. Sau đó, chúng tôi sẽ tạo các chức năng riêng biệt áp dụng logic trích xuất

_ thuật toán __name__[str. văn bản] → [từ khóa1, từ khóa2, …, từ khóan]

Sau đó, chúng tôi sẽ tạo một hàm áp dụng trích xuất trên toàn bộ kho văn bản

extract_keywords_from_corpus[algorithm, corpus] → {algorithm, corpus_keywords, elapsed_time}

Sau đó, Spacy sẽ giúp chúng tôi xác định một đối tượng so khớp sẽ trả về đúng hoặc sai nếu một từ khóa khớp với một mẫu cú pháp phù hợp với nhiệm vụ của chúng tôi

Cuối cùng, chúng tôi sẽ tổng hợp mọi thứ trong một chức năng xuất ra báo cáo cuối cùng của chúng tôi

Bộ dữ liệu

Tôi đang làm việc trên một loạt các đoạn văn bản nhỏ được lấy từ internet. đây là một mẫu

['To follow up from my previous questions. . Here is the result!\n',
'European mead competitions?\nI’d love some feedback on my mead, but entering the Mazer Cup isn’t an option for me, since shipping alcohol to the USA from Europe is illegal. [I know I probably wouldn’t get caught/prosecuted, but any kind of official record of an issue could screw up my upcoming citizenship application and I’m not willing to risk that].\n\nAre there any European mead comps out there? Or at least large beer comps that accept entries in the mead categories and are likely to have experienced mead judges?',
'Orange Rosemary Booch\n', 'Well folks, finally happened. Went on vacation and came home to mold.\n', 'I’m opening a gelato shop in London on Friday so we’ve been up non-stop practicing flavors - here’s one of our most recent attempts!\n', "Does anyone have resources for creating shelf stable hot sauce? Ferment and then water or pressure can?\nI have dozens of fresh peppers I want to use to make hot sauce, but the eventual goal is to customize a recipe and send it to my buddies across the States. I believe canning would be the best way to do this, but I'm not finding a lot of details on it. Any advice?", 'what is the practical difference between a wine filter and a water filter?\nwondering if you could use either', 'What is the best custard base?\nDoes someone have a recipe that tastes similar to Culver’s frozen custard?', 'Mold?\n'

Chủ yếu là các mặt hàng liên quan đến thực phẩm. Chúng tôi sẽ lấy mẫu 2000 tài liệu để kiểm tra các thuật toán của chúng tôi

Chúng tôi sẽ chưa xử lý trước văn bản của mình vì một số thuật toán dựa trên kết quả của chúng dựa trên sự hiện diện của từ khóa và dấu chấm câu

các thuật toán

Hãy xác định các chức năng khai thác từ khóa

Mỗi trình trích xuất lấy đối số là văn bản mà chúng tôi muốn trích xuất từ ​​khóa và trả về một danh sách các từ khóa, từ tốt nhất đến tệ hơn theo kỹ thuật cân của chúng. khá đơn giản

Ghi chú. vì một số lý do, tôi không thể khởi tạo tất cả các đối tượng trích xuất bên ngoài các chức năng. TopicRank và MultiPartiteRank gây ra lỗi bất cứ khi nào tôi làm điều đó. Hiệu suất khôn ngoan, điều này không hoàn hảo, nhưng dù sao điểm chuẩn vẫn có thể được thực hiện

Ví dụ về chức năng trích xuất SingleRank tại nơi làm việc. Hình ảnh của tác giả

Chúng tôi đã hạn chế một số mẫu ngữ pháp được chấp nhận bằng cách chuyển pos = {'NOUN', 'PROPN', 'ADJ', 'ADV'} — điều này, cùng với Spacy, sẽ đảm bảo rằng hầu hết tất cả các từ khóa sẽ có ý nghĩa từ một . Chúng tôi cũng muốn các từ khóa ít nhất là bát quái, chỉ để có các từ khóa cụ thể hơn và tránh quá chung chung. Kiểm tra tài liệu thư viện để tìm hiểu sâu hơn về các tham số và cách chúng hoạt động

Trích xuất từ ​​khóa từ toàn bộ Corpus

Bây giờ, hãy xác định một hàm sẽ áp dụng một trình trích xuất duy nhất cho toàn bộ kho văn bản trong khi cũng xuất ra một số thông tin

Tất cả chức năng này làm là điền vào một từ điển với dữ liệu đến từ trình trích xuất được chuyển vào dưới dạng đối số và một loạt thông tin hữu ích như mất bao nhiêu thời gian để thực hiện tác vụ

Hàm khớp ngữ pháp

Đây là nơi chúng tôi đảm bảo rằng các từ khóa được trình trích xuất trả về luôn [gần như?] có ý nghĩa. Ví dụ,

Các từ khóa mà chúng ta cần phải luôn có ý nghĩa khi đọc ngoài ngữ cảnh. Hình ảnh của tác giả

Chúng ta có thể hiểu rõ ràng rằng ba từ khóa đầu tiên có thể tự tồn tại. Chúng có ý nghĩa, chúng hoàn toàn hợp lý. Khi chúng tôi không có - chúng tôi cần thêm thông tin để hiểu ý nghĩa của đoạn dữ liệu đó. Chúng tôi muốn tránh điều này

Spacy có ích với đối tượng Matcher. Chúng tôi sẽ xác định một hàm so khớp lấy từ khóa và trả về Đúng hoặc Sai nếu các mẫu đã xác định khớp

Chức năng điểm chuẩn

Chúng ta đang gần hoàn tất. Đây là bước cuối cùng trước khi khởi chạy tập lệnh và thu thập kết quả

Chúng tôi sẽ xác định một chức năng điểm chuẩn có trong kho văn bản của chúng tôi và một boolean để xáo trộn hoặc không dữ liệu của chúng tôi. Đối với mỗi trình trích xuất, nó gọi hàm extract_keywords_from_corpus, trả về một từ điển chứa kết quả của trình trích xuất đó. Chúng tôi lưu trữ giá trị đó trong một danh sách

Đối với mỗi thuật toán trong danh sách, chúng tôi tính toán

  • số lượng từ khóa trích xuất trung bình
  • số từ khóa phù hợp trung bình
  • tính điểm có tính đến số lượng kết quả khớp trung bình được tìm thấy chia cho lượng thời gian cần thiết để thực hiện thao tác

Chúng tôi lưu trữ tất cả dữ liệu của mình trong Pandas DataFrame và chúng tôi xuất nó sang. csv

Kết quả

Để chạy điểm chuẩn dễ dàng như viết

Ghi nhật ký tiến trình của điểm chuẩn. Hình ảnh của tác giả

Và đây là kết quả

khung dữ liệu điểm chuẩn. Hình ảnh của tác giả

và một biểu đồ thanh với điểm hiệu suất

Kết quả của điểm chuẩn — Điểm hiệu suất tính đến độ chính xác theo thời gian. Hình ảnh của tác giả

Rake thắng rất nhiều trên tất cả các thuật toán khác theo công thức tính điểm [avg_matched_keywords_per_document/ time_elapsed_in_seconds]. Việc Rake xử lý 2000 tài liệu trong 2 giây là rất ấn tượng và mặc dù độ chính xác không cao bằng Yake hay KeyBERT nhưng yếu tố thời gian đã giúp nó vượt qua các đối thủ khác

Nếu chúng tôi chỉ xem xét độ chính xác, được tính bằng tỷ lệ giữa avg_matched_keywords_per_document và avg_keywords_per_document, chúng tôi sẽ nhận được các kết quả này

Kết quả chính xác từ điểm chuẩn của chúng tôi. Hình ảnh của tác giả

Rake đang hoạt động khá tốt từ góc độ chính xác. Thật hợp lý khi có điểm hiệu suất cao như vậy trong khoảng thời gian ngắn để thực hiện trích xuất

cân nhắc cuối cùng

Nếu chúng ta không có thời gian tính toán, KeyBERT chắc chắn sẽ giành vị trí chiến thắng với tư cách là thuật toán chính xác nhất có khả năng trích xuất các từ khóa nhạy cảm

Mục đích của dự án này là tìm ra thuật toán tốt nhất về mặt hiệu quả. Đối với nhiệm vụ này, Rake dường như đảm nhận vị trí đó

Điểm mấu chốt, nếu bạn yêu cầu độ chính xác hơn bất kỳ thứ gì khác, KeyBERT là giải pháp của bạn, nếu không thì Rake hoặc Yake. Tôi sẽ sử dụng Yake trong những trường hợp tôi không có mục tiêu cụ thể và chỉ muốn có một giải pháp cân bằng

Vui mừng bạn đã làm cho nó ở đây. Hy vọng rằng bạn sẽ thấy bài viết này hữu ích và triển khai các đoạn mã của nó trong cơ sở mã của bạn

Nếu bạn muốn hỗ trợ hoạt động tạo nội dung của tôi, vui lòng theo liên kết giới thiệu của tôi bên dưới và tham gia chương trình thành viên của Medium. Tôi sẽ nhận được một phần khoản đầu tư của bạn và bạn sẽ có thể truy cập vô số bài báo về khoa học dữ liệu và hơn thế nữa trên Phương tiện một cách liền mạch

Tham gia Medium với liên kết giới thiệu của tôi - Andrew D #datascience

Đọc mọi câu chuyện từ Andrew D #datascience [và hàng nghìn tác giả khác trên Medium]. Phí thành viên của bạn trực tiếp…

Trung bình. com

Người giới thiệu

Campos, R. , Mangaravit, V. , Pasquali, A. , Jatowt, A. , Jorge, A. , Nunes, C. và Jatowt, A. [2020]. YẾU. Trích xuất từ ​​khóa từ một tài liệu bằng nhiều tính năng cục bộ. Trong Tạp chí Khoa học Thông tin. Elsevier, Tập 509, trang 257–289. pdf

Campos R. , Mangaravit V. , Pasquali A. , Jorge A. M. , nunes C. , và Jatowt A. [2018]. Phương pháp trích xuất từ ​​khóa tự động dựa trên tính năng văn bản cho các tài liệu đơn lẻ. Trong. Pasi G. , Piwowarski B. , Azzopardi L. , Hanbury A. [ed]. Những tiến bộ trong truy xuất thông tin. ECIR 2018 [Grenoble, Pháp. 26–29 tháng 3]. Bài giảng về Khoa học Máy tính, tập 10772, trang. 684–691. pdf

Campos R. , Mangaravit V. , Pasquali A. , Jorge A. M. , nunes C. , và Jatowt A. [2018]. YẾU. Trình trích xuất từ ​​khóa tự động độc lập với bộ sưu tập. Trong. Pasi G. , Piwowarski B. , Azzopardi L. , Hanbury A. [ed]. Những tiến bộ trong truy xuất thông tin. ECIR 2018 [Grenoble, Pháp. 26–29 tháng 3]. Bài giảng về Khoa học Máy tính, tập 10772, trang. 806–810

người lướt sóng. [N. d. ]. CSURFER/Rake-nltk. Python triển khai thuật toán trích xuất từ ​​khóa tự động nhanh bằng NLTK. Truy cập ngày 25 tháng 11 năm 2021, từ https. //github. com/csurfer/rake-nltk

Liaad. [N. d. ]. Liaad/Yake. Khai thác từ khóa không giám sát một tài liệu. Truy cập ngày 25 tháng 11 năm 2021, từ https. //github. com/LIAAD/yake

Boudinfl. [N. d. ]. BOUDINFL/pke. Mô-đun trích xuất cụm từ khóa Python. Truy cập ngày 25 tháng 11 năm 2021, từ https. //github. com/boudinfl/pke

MaartenGr. [N. d. ]. MAARTENGR/Keybert. Khai thác từ khóa tối thiểu với bert. Truy cập ngày 25 tháng 11 năm 2021, từ https. //github. com/MaartenGr/KeyBERT

vụ nổ. [N. d. ]. vụ nổ / spacy. 💫 xử lý ngôn ngữ tự nhiên [NLP] cường độ công nghiệp trong Python. Truy cập ngày 25 tháng 11 năm 2021, từ https. //github. com/nổ/spaCy

Chủ Đề