1. langdetect
? 簡介: langdetect 是一個非常流行的語言檢測庫,基于 Google 的 language-detection 項目。它可以檢測多種語言,并且對于短文本也有不錯的識別效果。
? 安裝:
pip install langdetect
? 使用示例:
from langdetect import detect
text = “Bonjour tout le monde”
language = detect(text)
print(language) # 輸出: ‘fr’ (法語)
2. langid
? 簡介: langid 是另一個非常強大的語言識別庫,支持97種語言。它的特點是完全自包含且無需外部依賴。
? 安裝:
pip install langid
? 使用示例:
import langid
text = “Hola, ?cómo estás?”
language, _ = langid.classify(text)
print(language) # 輸出: ‘es’ (西班牙語)
3. polyglot
? 簡介: polyglot 是一個支持多語言處理的庫,它不僅提供語言識別功能,還支持情感分析、實體識別等多種自然語言處理任務。
? 安裝:
pip install polyglot
? 使用示例:
from polyglot.detect import Detector
text = “Ceci est un exemple de texte en fran?ais”
detector = Detector(text)
language = detector.language.code
print(language) # 輸出: ‘fr’ (法語)
4. TextBlob
? 簡介: TextBlob 是一個簡潔易用的自然語言處理工具包,雖然它主要用于情感分析、詞性標注等任務,但也支持語言識別。
? 安裝:
pip install textblob
? 使用示例:
from textblob import TextBlob
text = “Hello, how are you?”
blob = TextBlob(text)
print(blob.detect_language()) # 輸出: ‘en’ (英語)
5. FastText (by Facebook)
? 簡介: FastText 是一個由 Facebook 提供的開源庫,除了高效的詞向量表示外,它也能很好地進行語言識別。它支持多達170多種語言。
? 安裝:
pip install fasttext
? 使用示例:
import fasttext
model = fasttext.load_model(‘lid.176.bin’) # 下載預訓練模型
text = “Ceci est un texte en fran?ais”
prediction = model.predict(text)
print(prediction) # 輸出: (‘__label__fr’,)
6. cld3 (Compact Language Detector v3)
? 簡介: cld3 是一個高效的語言檢測庫,基于 Google 的 Compact Language Detector v3。它對短文本和多語言文本都有不錯的支持。
? 安裝:
pip install cld3
? 使用示例:
import cld3
text = “Hola, ?cómo estás?”
language = cld3.get_language(text)
print(language) # 輸出: Language: es (西班牙語)
總結:
? 如果需要一個簡單、易用的工具,langdetect 和 langid 都是不錯的選擇。
? 如果對處理多語言的文本和需要其他 NLP 功能有需求,可以考慮使用 polyglot 或 TextBlob。
? 如果需要更高精度的檢測,尤其是在短文本的情況下,FastText 和 cld3 是更強大的選擇。
你可以根據具體需求選擇適合的工具!
]]>1. 工具介紹
? Pymupdf4llm
是基于 PyMuPDF 的輕量級庫,用于解析 PDF 文檔并將其輸出為適合 LLM 使用的格式。主要側重文本提取和結構化處理,適合生成上下文良好的段落,便于用于 LLM 的問答場景。
? pdf-extract-api
是一個基于 API 的工具,專注于從 PDF 中提取特定的數據(如表格、元數據、關鍵段落等)。它通常提供更精細的配置選項,且需要在線服務支持。
2. 優點
Pymupdf4llm
? 開源和輕量化:基于 PyMuPDF,依賴簡單,不需要網絡請求。
? 靈活性:支持本地化部署和定制,適合對隱私敏感的數據處理。
? LLM優化:文本提取經過優化,更適合直接喂給 LLM 使用。
? 社區支持:有 Python 社區的廣泛支持,文檔豐富。
pdf-extract-api
? 精確提取:通過 API 提供強大的功能,如識別表格、圖像提取以及結構化內容分離。
? 便捷性:通常不需要用戶過多了解 PDF 內部結構,適合快速實現提取目標。
? 擴展性:可與其他 API 組合實現復雜任務,如 OCR 集成處理掃描 PDF。
3. 缺點
Pymupdf4llm
? 復雜性有限:對非常復雜的 PDF(如多層嵌套、表格、圖片)支持不如專業化工具。
? 手動調整需求高:對提取后的數據,需要編寫代碼進一步清洗和整理。
pdf-extract-api
? 依賴在線服務:需要網絡訪問,可能對敏感文檔不適合。
? 成本問題:通常是收費服務,使用量大時費用可能較高。
? 上手門檻高:需要了解 API 調用的基礎,復雜設置可能增加學習成本。
4. 準備度與上手難度
指標 Pymupdf4llm pdf-extract-api
部署與安裝 安裝簡單(pip install pymupdf 等) 需要注冊 API 服務并配置訪問權限
學習曲線 易于上手,Python 開發者友好 需要熟悉 API 文檔,配置參數稍復雜
定制化能力 高,代碼靈活,自由控制輸出內容和格式 中,定制需依賴 API 提供的接口和選項
速度 本地運行,速度快 API 請求受網絡和服務端性能影響
環境依賴 本地運行,無需聯網 需聯網使用在線 API 服務
總結與建議
? 選擇 Pymupdf4llm:
如果你希望完全掌控 PDF 的提取邏輯、對敏感數據有隱私保護需求,并傾向于本地化輕量部署,Pymupdf4llm 是不錯的選擇。
? 選擇 pdf-extract-api:
如果需要快速處理復雜的 PDF 任務(如表格解析、精確提取特定內容),且不介意使用在線服務和支付一定費用,那么 pdf-extract-api 更加適合。
最終選擇取決于項目的復雜性、隱私要求和開發資源。
]]>RAGFlow 是一個基于對文檔的深入理解的開源 RAG(檢索增強生成)引擎。它為任何規模的企業提供了簡化的 RAG 工作流程,結合了 LLM(大型語言模型)以提供真實的問答功能,并以來自各種復雜格式數據的有根據的引文為后盾。
demo鏈接:RAGFlow
特點:
1、有一定的數據質量保證,能從復雜的非結構化數據中提取基于文檔理解的深度知識。
2、內置模板,可以基于模板形成知識庫;文檔分塊可以實現人工干預,提高文檔質量;
3、可以兼容異構數據源,支持 Word、幻燈片、excel、txt、圖像、掃描副本、結構化數據、網頁等。
部署要求:
vm.max_map_count
要檢查 的值 :vm.max_map_count
$ sysctl vm.max_map_count如果不是,則重置為至少 262144 的值。vm.max_map_count
vm.max_map_count
dev-slim
$ cd ragflow/docker$ docker compose -f docker-compose.yml up -d注意:包含嵌入模型和 Python 庫的 RAGFlow Docker 映像的大小約為 9GB,加載時間可能要長得多。
RAGFlow_IMAGE
RAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0-slim
RAGFlow_IMAGE
RAGFLOW_IMAGE=infiniflow/ragflow:dev
RAGFlow_IMAGE
RAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0
network abnormal
http://IP_OF_YOUR_MACHINE
80
user_default_llm
API_KEY
有關更多信息,請參閱 llm_api_key_setup。部署完成后,還需要對RAGFlow進行配置,需要關注以下幾點:
SVR_HTTP_PORT
MYSQL_PASSWORD
MINIO_PASSWORD
您必須確保對 .env 文件的更改與 service_conf.yaml 文件中的更改一致。
./docker/README 文件提供了環境設置和服務配置的詳細描述,您需要確保 ./docker/README 文件中列出的所有環境設置都與 service_conf.yaml 文件中的相應配置保持一致。
要更新默認 HTTP 服務端口 (80),請轉到 docker-compose.yml 并更改為 。80:80
<YOUR_SERVING_PORT>:80
對上述配置的更新需要重啟所有容器才能生效:
$ docker compose -f docker/docker-compose.yml up -d
此映像的大小約為 1 GB,依賴于外部 LLM 和嵌入服務。
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
docker build -f Dockerfile.slim -t infiniflow/ragflow:dev-slim .
此映像的大小約為 9 GB。由于它包括嵌入模型,因此它僅依賴于外部 LLM 服務。
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
pip3 install huggingface-hub nltk
python3 download_deps.py
docker build -f Dockerfile -t infiniflow/ragflow:dev .
/etc/hosts
127.0.0.1
127.0.0.1 es01 mysql minio redis
5455
1200
HF_ENDPOINT
export HF_ENDPOINT=https://hf-mirror.com啟動 backend service:proxy.target
http://127.0.0.1:9380
啟動前端服務:
npm run dev 以下輸出確認系統已成功啟動完成。
1、Text2KG 的使用
Text2KG是一個開源項目,能夠利用大型語言模型(zero-shot)跨領域從文本中提取實體和關系,自動構建和更新知識圖譜,并通過Neo4j進行可視化。
iText2KG由四個主要模塊組成:文檔提取器、增量實體提取器、增量關系提取器、圖形集成器和可視化。它們協同工作,從非結構化文本構建和可視化知識圖譜。
四個模塊中,增量實體提取器與增量關系提取器最為關鍵,采用大模型來實現,LLM提取代表一個唯一概念的實體,以避免語義混合的實體。顯示了使用 Langchain JSON 解析器的實體和關系提取prompt。分類如下:藍色 – 由 Langchain 自動格式化的prompt;常規 – iText2KG設計的prompt;斜體 – 專門為實體和關系提取設計的prompt。(a)關系提取prompt和(b)實體提取prompt。
為了說明知識圖譜構建的結果,在三種不同場景下,將基線方法與iText2KG進行了比較:
一種由 LLM 驅動的零樣本方法,使用大型語言模型構建增量知識圖譜(KG)
iText2KG
是一個 Python
包,通過利用大型語言模型從文本文檔中提取實體和關系,逐步構建具有已解析實體和關系的一致知識圖譜。
它具有零樣本能力,無需專門的訓練即可跨各個領域提取知識。
它包含四個模塊:文檔提煉器、增量實體提取器、增量關系提取器和圖形集成器與可視化。
Neo4j
?圖形集成器:最后一個模塊以圖形格式可視化關系和實體,利用 Neo4j 進行有效表示。對于我們的 iText2KG
它包含了兩大特點
iText2KG
?允許增量構建?KG
,這意味著它可以在新數據可用時不斷更新和擴展圖,而無需進行大量重新處理。LLM
?的零樣本功能,使其無需預定義集或外部本體即可運行。這種靈活性使其能夠適應各種?KG
?構建場景,而無需進行大量訓練或微調。在運行 iText2KG
之前,我們先設置好大模型,我這里選擇的是 OpenAi
的模型以及 HuggingFace
的 bge-large-zh embedding
模型。這么選擇也是考慮到構建 KG
的準確度。
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
import os
os.environ["OPENAI_API_KEY"] = "*****"
openai_api_key = os.environ["OPENAI_API_KEY"]
openai_llm_model = llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
messages = [
(
"system",
"You are a helpful assistant that translates English to French. Translate the user sentence.",
),
("human", "I love programming."),
]
ai_msg=openai_llm_model.invoke(messages)
開始部署我們的 Embedding
模型:
from langchain_huggingface.embeddings import HuggingFaceEmbeddings
openai_embeddings_model = HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5")
text = "This is a test document."
query_result = openai_embeddings_model.embed_query(text)
query_result[:3]
doc_result = openai_embeddings_model.embed_documents([text])
iText2KG
構建 KG
我們這里的場景是,給出一篇簡歷,使用知識圖譜將在線職位描述與生成的簡歷聯系起來。
設定目標是評估候選人是否適合這份工作。
我們可以為 iText2KG
的每個模塊使用不同的 LLM
或嵌入模型。但是,重要的是確保節點和關系嵌入的維度在各個模型之間保持一致。
如果嵌入維度不同,余弦相似度可能難以準確測量向量距離以進行進一步匹配。
我們的簡歷放到根目錄,加載簡歷:
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader(f"./CV_Emily_Davis.pdf")
pages = loader.load_and_split()
初始化 DocumentDistiller
引入 llm
:
from itext2kg.documents_distiller import DocumentsDisiller, CV
document_distiller = DocumentsDisiller(llm_model = openai_llm_model)
信息提煉:
IE_query = '''
# DIRECTIVES :
- Act like an experienced information extractor.
- You have a chunk of a CV.
- If you do not find the right information, keep its place empty.
'''
# 使用定義好的查詢和輸出數據結構提煉文檔。
distilled_cv = document_distiller.distill(documents=[page.page_content.replace("{", '[').replace("}", "]") for page in pages], IE_query=IE_query, output_data_structure=CV)
將提煉后的文檔格式化為語義部分。
semantic_blocks_cv = [f"{key} - {value}".replace("{", "[").replace("}", "]") for key, value in distilled_cv.items() if value !=[] and value != "" and value != None]
我們可以自定義輸出數據結構,我們這里定義了4種,工作經歷模型,崗位,技能,證書。
from pydantic import BaseModel, Field
from typing import List, Optional
class JobResponsibility(BaseModel):
description: str = Field(..., description="A specific responsibility in the job role")
class JobQualification(BaseModel):
skill: str = Field(..., description="A required or preferred skill for the job")
class JobCertification(BaseModel):
certification: str = Field(..., description="Required or preferred certifications for the job")
class JobOffer(BaseModel):
job_offer_title: str = Field(..., description="The job title")
company: str = Field(..., description="The name of the company offering the job")
location: str = Field(..., description="The job location (can specify if remote/hybrid)")
job_type: str = Field(..., description="Type of job (e.g., full-time, part-time, contract)")
responsibilities: List[JobResponsibility] = Field(..., description="List of key responsibilities")
qualifications: List[JobQualification] = Field(..., description="List of required or preferred qualifications")
certifications: Optional[List[JobCertification]] = Field(None, description="Required or preferred certifications")
benefits: Optional[List[str]] = Field(None, description="List of job benefits")
experience_required: str = Field(..., description="Required years of experience")
salary_range: Optional[str] = Field(None, description="Salary range for the position")
apply_url: Optional[str] = Field(None, description="URL to apply for the job")
定義一個招聘工作需求的描述:
job_offer = """
About the Job Offer
THE FICTITIOUS COMPANY
FICTITIOUS COMPANY is a high-end French fashion brand known for its graphic and poetic style, driven by the values of authenticity and transparency upheld by its creator Simon Porte Jacquemus.
Your Role
Craft visual stories that captivate, inform, and inspire. Transform concepts and ideas into visual representations. As a member of the studio, in collaboration with the designers and under the direction of the Creative Designer, you should be able to take written or spoken ideas and convert them into designs that resonate. You need to have a deep understanding of the brand image and DNA, being able to find the style and layout suited to each project.
Your Missions
Translate creative direction into high-quality silhouettes using Photoshop
Work on a wide range of projects to visualize and develop graphic designs that meet each brief
Work independently as well as in collaboration with the studio team to meet deadlines, potentially handling five or more projects simultaneously
Develop color schemes and renderings in Photoshop, categorized by themes, subjects, etc.
Your Profile
Bachelor’s degree (Bac+3/5) in Graphic Design or Art
3 years of experience in similar roles within a luxury brand's studio
Proficiency in Adobe Suite, including Illustrator, InDesign, Photoshop
Excellent communication and presentation skills
Strong organizational and time management skills to meet deadlines in a fast-paced environment
Good understanding of the design process
Freelance cont
繼續使用上面方法做信息提煉:
IE_query = '''
# DIRECTIVES :
- Act like an experienced information extractor.
- You have a chunk of a job offer description.
- If you do not find the right information, keep its place empty.
'''
distilled_Job_Offer = document_distiller.distill(documents=[job_offer], IE_query=IE_query, output_data_structure=JobOffer)
print(distilled_Job_Offer)
semantic_blocks_job_offer = [f"{key} - {value}".replace("{", "[").replace("}", "]") for key, value in distilled_Job_Offer.items() if value !=[] and value != "" and value != None]
到這里準備工作完成,簡歷和工作需求都已經提煉完畢,然后正式開始構建 graph
,我們將簡歷的所有語義塊作為一個塊傳遞給了 LLM
。
也將工作需求作為另一個語義塊傳遞,也可以在構建圖時將語義塊分開。
我們需要注意每個塊中包含多少信息,然后好將它與其他塊連接起來,我們在這里做的就是一次性傳遞所有語義塊。
from itext2kg import iText2KG
itext2kg = iText2KG(llm_model = openai_llm_model, embeddings_model = openai_embeddings_model)
global_ent, global_rel = itext2kg.build_graph(sections=[semantic_blocks_cv], ent_threshold=0.6, rel_threshold=0.6)
global_ent_, global_rel_ = itext2kg.build_graph(sections=[semantic_blocks_job_offer], existing_global_entities = global_ent, existing_global_relationships = global_rel, ent_threshold=0.6, rel_threshold=0.6)
iText2KG
構建 KG
的過程我們看到有很多參數,下面分貝是對每個參數的表示做一些解釋:
llm_model
:用于從文本中提取實體和關系的語言模型實例。embeddings_model
:用于創建提取實體的向量表示的嵌入模型實例。sleep_time (int)
:遇到速率限制或錯誤時等待的時間(以秒為單位)(僅適用于?OpenAI
)。默認為 5 秒。iText2KG
的 build_graph
參數:
sections
?(List[str])
:字符串(語義塊)列表,其中每個字符串代表文檔的一部分,將從中提取實體和關系。existing_global_entities
?(List[dict], optional)
:與新提取的實體進行匹配的現有全局實體列表。每個實體都表示為一個字典。existing_global_relationships (List[dict], optional)
:與新提取的關系匹配的現有全局關系列表。每個關系都表示為一個字典。ent_threshold (float, optional)
:實體匹配的閾值,用于合并不同部分的實體。默認值為 0.7。rel_threshold (float, optional)
:關系匹配的閾值,用于合并不同部分的關系。默認值為 0.7。從圖中結果看到我們構建過程中的實體,和關聯關系。
最后使用 GraphIntegrator
對構建的知識圖譜進行可視化。
使用指定的憑據訪問圖形數據庫 Neo4j
,并對生成的圖形進行可視化,以提供從文檔中提取的關系和實體的視覺表示。
from itext2kg.graph_integration import GraphIntegrator
URI = "bolt://3.216.93.32:7687"
USERNAME = "neo4j"
PASSWORD = "selection-cosal-cubes"
new_graph = {}
new_graph["nodes"] = global_ent_
new_graph["relationships"] = global_rel_
GraphIntegrator(uri=URI, username=USERNAME, password=PASSWORD).visualize_graph(json_graph=new_graph)
打開我們的 Neo4j
圖形數據庫:
以下是一粒云科技的四個核心產品“協同辦公網盤”、“文件安全交換審計系統”、“統一RAG文檔搜索平臺”和“ESS統一存儲平臺”四個產品核心功能模塊的概要描述。
核心功能模塊及描述:
功能模塊 | 描述 |
---|---|
文檔管理與權限劃分 | 實現文檔的集中化管理,基于用戶角色和權限等級進行細粒度的訪問控制,支持文檔分類、歸檔和版本管理。 |
在線預覽與分享協同 | 支持多格式文件的在線預覽(如PDF、視頻等),快速生成分享鏈接,支持設置訪問權限和有效期限。 |
多人協同編輯 | 提供實時多人編輯功能,支持變更記錄追溯和版本控制,方便團隊協作與文檔修改。 |
多終端文件同步與備份 | 實現PC端、移動端的實時文件同步與備份,支持斷點續傳和跨設備訪問,保障文件在多設備間的一致性。 |
日志審計 | 提供詳細的操作日志記錄,包括文件的上傳、下載、分享和編輯行為,方便管理員審計和追蹤異常操作。 |
核心功能模塊及描述:
功能模塊 | 描述 |
---|---|
多區域網段配置管理 | 支持不同區域、網段的配置與管理,定義文件交換的區域范圍,確保跨網文件交換過程受控。 |
點對點的跨網文件交換 | 實現單點間跨網文件安全交換,保障數據傳輸的可靠性和安全性,適用于小范圍點對點的快速文件傳輸。 |
區對區的跨網文件交換同步 | 提供多網段、多個區域間的文件同步與交換能力,支持大規模文件在不同網域之間高效、安全傳輸。 |
跨網審批流程圖形配置 | 支持跨網傳輸的審批流程圖形化配置,簡化流程定義,方便管理員快速部署和調整審批策略。 |
敏感內容安全與病毒檢測 | 集成敏感信息檢測和病毒掃描模塊,確保文件傳輸的內容合規和安全。 |
內容AI識別檢測 | 采用AI算法對文件內容進行智能識別和分析,自動檢測敏感信息、分類并標記不符合傳輸規范的內容。 |
文件安全級別設定與計算 | 根據文件的敏感程度自動分配安全級別,并提供動態調整機制,確保安全策略與文件的實際屬性匹配。 |
網絡邊緣安全接入管理盒子 | 在跨網邊緣部署安全接入設備,實現網絡隔離的情況下文件安全交換,并防止未經授權的設備訪問。 |
核心功能模塊及描述:
功能模塊 | 描述 |
---|---|
多源存儲的納管 | 實現對多種存儲類型(NAS、對象存儲、分布式存儲等)的統一接管和管理,消除信息孤島,支持跨源數據搜索。 |
索引管理 | 提供高效的索引創建、更新與優化功能,支持分布式搜索,快速定位目標文檔。 |
知識主題管理與問答 | 基于文檔內容創建知識主題,提供主題分類和關聯關系,支持智能問答和知識推薦,提升文檔利用率。 |
基于規范規則下的文檔內容鑒定 | 根據預定義的規則對文檔內容進行自動化鑒定,識別合規性與敏感信息,分類管理不合規內容。 |
敏感內容信息的布控與識別處理 | 通過設置敏感信息的布控規則,實時監控和識別文檔中的敏感內容,并對違規文檔采取自動處理措施。 |
RAG統一搜索(數據增強生成式搜索) | 提供基于生成式AI的智能搜索能力,結合外部知識庫和現有文檔,實現上下文增強的內容生成與精準查詢。 |
核心功能模塊及描述:
功能模塊 | 描述 |
---|---|
統一存儲(文件、對象、塊、生命周期) | 支持文件存儲、對象存儲和塊存儲的統一管理,提供自動化的存儲生命周期策略,實現數據分級存儲與清理。 |
安全與管理 | 提供快照、克隆、容災和高可用(HA)支持,配置故障隔離和精簡管理功能,保障存儲系統的安全性與可靠性。 |
訪問控制 | 支持QoS(服務質量控制)、ACL(訪問控制列表)權限管理、多副本機制、斷點續傳和WORM(一次寫入多次讀取)功能。 |
性能監控 | 提供IOPS(每秒輸入輸出操作數)、糾刪碼支持、快速數據恢復等性能監控功能,保障存儲系統的高效運行。 |
硬件管理與告警 | 實現對存儲設備(SSD、HDD、磁帶等)健康狀態的監控與告警,支持硬件異常的實時檢測與處理。 |
如果貴單位對以上產品有需求,請與我方工作人員聯系。
]]>