Bỏ qua tới nội dung chính
Quay lại tin tức

3 thủ thuật SpaCy giúp xử lý văn bản và nhận dạng thực thể hiệu quả

KDnuggets· Matthew Mayo· 5/6/2026general

Trong bài viết này, chúng ta sẽ tìm hiểu ba thủ thuật spaCy thiết yếu mà mọi nhà phát triển nên trang bị để tối đa hóa tốc độ xử lý và tùy chỉnh nhận dạng thực thể.

3 thủ thuật SpaCy để xử lý văn bản và nhận dạng thực thể hiệu quả - KDnuggets Blog Bài viết hàng đầu Giới thiệu Chủ đề AI Lời khuyên nghề nghiệp Thị giác máy tính Kỹ thuật dữ liệu Khoa học dữ liệu Mô hình ngôn ngữ Học máy MLOps NLP Lập trình Python SQL Bộ dữ liệu Sự kiện Tài nguyên Tóm tắt nhanh Đề xuất Tóm tắt công nghệ Quảng cáo Tham gia Bản tin 3 thủ thuật SpaCy để xử lý văn bản và nhận dạng thực thể hiệu quả Trong bài viết này, chúng ta sẽ khám phá ba thủ thuật spaCy thiết yếu mà mọi nhà phát triển nên có trong bộ công cụ của mình để tối đa hóa tốc độ xử lý và tùy chỉnh nhận dạng thực thể. Bởi Matthew Mayo, Biên tập viên quản lý KDnuggets vào ngày 5/6/2026 trong Xử lý ngôn ngữ tự nhiên # Giới thiệu Đặc biệt nhờ các mô hình ngôn ngữ lớn đương đại, xử lý ngôn ngữ tự nhiên (NLP) là một trụ cột cơ bản của AI và các hệ thống phần mềm hiện đại. Bạn sẽ tìm thấy các kỹ thuật và công nghệ NLP hỗ trợ mọi thứ từ công cụ tìm kiếm và chatbot đến định tuyến hỗ trợ khách hàng tự động và các quy trình trích xuất thực thể. Khi nói đến NLP cấp độ sản xuất trong Python, spaCy là tiêu chuẩn công nghiệp không thể tranh cãi. spaCy được thiết kế đặc biệt để sử dụng trong sản xuất, cung cấp tốc độ cấp công nghiệp, các mô hình thống kê và biến đổi được đào tạo trước, cùng với API trực quan. Thật không may, nhiều nhà phát triển coi spaCy như một khối hộp đen đơn giản. Họ tải một mô hình, chạy nó trên văn bản và chấp nhận tốc độ xử lý mặc định cũng như giới hạn trích xuất. Khi mở rộng quy mô từ một nguyên mẫu cục bộ để xử lý hàng triệu tài liệu, các cấu hình mặc định này có thể trở thành nút thắt cổ chai về tính toán, dẫn đến độ trễ, dung lượng bộ nhớ phình to và bỏ sót các thực thể cụ thể theo miền. Để xây dựng các quy trình xử lý văn bản hiệu suất cao, bạn phải hiểu cách tối ưu hóa luồng thực thi nội bộ của spaCy. Trong bài viết này, chúng ta sẽ khám phá ba thủ thuật spaCy thiết yếu mà mọi nhà phát triển nên có trong bộ công cụ của mình để tối đa hóa tốc độ xử lý và tùy chỉnh nhận dạng thực thể: tải pipeline chọn lọc, xử lý hàng loạt song song và nhận dạng thực thể thống kê dựa trên quy tắc lai. Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt spaCy, cũng như mô hình tiếng Anh đa năng nhẹ của nó: pip install spacy python -m spacy download en_core_web_sm # 1. Tải pipeline chọn lọc và vô hiệu hóa thành phần Theo mặc định, khi bạn tải một mô hình spaCy được đào tạo trước (chẳng hạn như en_core_web_sm), spaCy sẽ khởi tạo một pipeline NLP hoàn chỉnh. Pipeline này thường bao gồm: một bộ mã hóa (tokenizer) một bộ gắn thẻ từ loại (part-of-speech tagger) một bộ phân tích cú pháp phụ thuộc (dependency parser) một bộ chuyển đổi từ gốc (lemmatizer) một bộ quy tắc thuộc tính (attribute_ruler) một bộ nhận dạng thực thể có tên (named entity recognizer - NER) Mặc dù bộ tính năng phong phú mặc định đầy đủ này rất tuyệt vời, nhưng nó đi kèm với chi phí tính toán đáng kể. Nếu ứng dụng của bạn chỉ cần thực hiện nhận dạng thực thể có tên (NER), việc chạy bộ phân tích cú pháp phụ thuộc và bộ chuyển đổi từ gốc là lãng phí chu kỳ CPU và bộ nhớ. Ngược lại, nếu bạn chỉ làm sạch văn bản và trích xuất từ gốc, việc chạy mô hình NER thống kê sâu là cực kỳ không hiệu quả. Bạn có thể tối ưu hóa điều này bằng cách loại trừ chọn lọc các thành phần trong quá trình tải hoặc tạm thời vô hiệu hóa chúng trong quá trình thực thi bằng cách sử dụng trình quản lý ngữ cảnh. Phương pháp đơn giản này tải và chạy mọi thành phần mặc định trên văn bản, bất kể đầu ra của các thành phần có được sử dụng thực tế hay không: ```python import spacy import time # Tải mô hình tiếng Anh nhỏ nlp = spacy.load("en_core_web_sm") texts = ["Apple is looking at buying U.K. startup for $1 billion"] * 1000 # Thực thi đơn giản: chạy tagger, parser, lemmatizer và ner trên mỗi tài liệu # Giả sử chúng ta chỉ quan tâm đến các thực thể được đặt tên ở đây start_time = time.time() for text in texts: doc = nlp(text) entities = [(ent.text, ent.label_) for ent in doc.ents] duration_full = time.time() - start_time print(f"Toàn bộ pipeline đã xử lý 1.000 tài liệu trong: {duration_full:.4f} giây") ``` Đầu ra: ``` Toàn bộ pipeline đã xử lý 1.000 tài liệu trong: 2.8540 giây ``` Bây giờ, chúng ta sẽ tối ưu hóa việc thực thi theo hai cách cụ thể. Thứ nhất, chúng ta sẽ loại trừ các thành phần nặng, không sử dụng như bộ phân tích cú pháp (dependency parser) tại thời điểm tải. Thứ hai, chúng ta sẽ sử dụng `nlp.select_pipes()` để tạm thời vô hiệu hóa các thành phần khi xử lý các khối lượng công việc cụ thể. ```python import spacy import time # Tối ưu hóa thời gian tải: Loại trừ bộ phân tích cú pháp và tagger nặng ngay từ đầu # Điều này giúp giảm thời gian khởi tạo và dung lượng bộ nhớ nlp_optimized = spacy.load("en_core_web_sm", exclude=["parser", "tagger"]) texts = ["Apple is looking at buying U.K. startup for $1 billion"] * 1000 # Tối ưu hóa trình quản lý ngữ cảnh, tạm thời vô hiệu hóa các thành phần # Chúng ta đã loại trừ hoàn toàn parser và tagger, chúng ta vô hiệu hóa attribute ruler và lemmatizer ở đây start_time = time.time() with nlp_optimized.select_pipes(disable=["attribute_ruler", "lemmatizer"]): for text in texts: doc = nlp_optimized(text) entities = [(ent.text, ent.label_) for ent in doc.ents] duration_opt = time.time() - start_time print(f"Pipeline được tối ưu hóa đã xử lý 1.000 tài liệu trong: {duration_opt:.4f} giây") print(f"Tăng tốc: {duration_full / duration_opt:.2f} lần nhanh hơn!") ``` Hãy so sánh thời gian chạy: ``` Toàn bộ pipeline đã xử lý 1.000 tài liệu trong: 2.8739 giây Pipeline được tối ưu hóa đã xử lý 1.000 tài liệu trong: 1.7859 giây Tăng tốc: 1.61 lần nhanh hơn! ``` Trong ví dụ được tối ưu hóa, việc truyền `exclude=["parser", "tagger"]` vào `spacy.load()` ngăn chặn hoàn toàn các thành phần này được tải vào bộ nhớ. Trong một phương pháp thay thế để đạt được kết quả tương tự, chúng ta đã truyền `disable=["attribute_ruler", "lemmatizer"]` để tạm thời vô hiệu hóa quá trình xử lý của chúng. Hiệu quả là, khi chúng ta xử lý văn bản, spaCy bỏ qua phân tích phụ thuộc token và gắn nhãn từ loại (part-of-speech tag), vốn là các phép tính tốn kém, và chuyển thẳng sang nhận dạng thực thể.

Nguồn tin: KDnuggets — Tác giả: Matthew Mayo. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.