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ệnTôi đã sử dụng các thư viện sau để tiến hành nghiên cứu
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ệmCách điểm chuẩn hoạt động như sau 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ệuTô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', 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ánHã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 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ộ CorpusBâ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ụ, 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ẩnChú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
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 Để chạy điểm chuẩn dễ dàng như viết Và đây là kết quả và một biểu đồ thanh với điểm hiệu suất 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 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ùngNế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ệuCampos, 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 |