Portuguese OpenIE
Biblioteca Python unificada para Extração Aberta de Informação (OpenIE) em português. Ela oferece a mesma API para duas linhas de pesquisa desenvolvidas no doutorado de Bruno Souza Cabral:
- PortNOIE, o extrator neural clássico por rotulagem de sequência, indicado para extrações estritamente presentes no texto;
- modelos generativos Qwen3OIE, PortugueseT5Oie e Llama-PortOIE3, publicados no Hugging Face, incluindo OpenIE abstrativa.
O resultado sempre é normalizado para triplas ARG0, V, ARG1, independentemente
do modelo escolhido.
Instalação
A release suporta Python 3.10–3.13.
Para os modelos do Hugging Face:
pip install "portuguese-openie[transformers]"
O Llama-PortOIE3 é publicado somente em GGUF e usa um extra separado:
pip install "portuguese-openie[gguf]"
Para o PortNOIE, incluindo o backend PyTorch e o downloader do checkpoint histórico:
pip install "portuguese-openie[portnoie]"
Para instalar todos os backends de uma vez:
pip install "portuguese-openie[all]"
Durante o desenvolvimento local:
git clone https://github.com/FORMAS/Portuguese-OpenIE.git
cd Portuguese-OpenIE
python -m venv .venv
# Linux/macOS: source .venv/bin/activate
# Windows: .venv\Scripts\activate
python -m pip install -e ".[transformers,dev]"
Não é necessário informar diretório de modelo. Os modelos neurais, o GGUF e o
checkpoint histórico do PortNOIE são resolvidos pelo enum e baixados do Hugging Face
na primeira extração. Nenhum wheel inclui pesos. Todos reutilizam cache nas chamadas seguintes.
Cada modelo remoto é fixado por padrão na revisão auditada registrada na biblioteca,
evitando que uma alteração futura em main mude silenciosamente os resultados.
Uso rápido
from portuguese_openie import Model, PortugueseOpenIE
extractor = PortugueseOpenIE(Model.QWEN3_OIE_0_6B)
triples = extractor.extract("A UFBA está localizada em Salvador.")
for triple in triples:
print(triple.to_dict())
Saída normalizada:
{"ARG0": "A UFBA", "V": "está localizada em", "ARG1": "Salvador"}
Para manter o texto bruto gerado e os metadados:
result = extractor.extract_with_metadata(
"A UFBA está localizada em Salvador."
)
print(result.raw_output)
print(result.to_dict())
Linha de comando
portuguese-openie --model qwen3-oie-0.6b \
"A Universidade Federal da Bahia fica em Salvador."
Também é possível usar entrada padrão:
echo "A UFBA fica em Salvador." | portuguese-openie --model portuguese-t5-oie-abstractive
Para ver todos os aliases:
portuguese-openie --list-models
Após uma primeira execução online, use --local-files-only para trabalhar offline.
--cache-dir escolhe o cache e --revision permite uma revisão explicitamente
diferente da versão auditada; nenhum desses argumentos é obrigatório.
Modelos disponíveis
| Alias | Tipo | Tamanho | Quando usar |
|---|---|---|---|
qwen3-oie-0.6b |
abstrativo | 0,6B | menor modelo e ponto de partida recomendado |
qwen3-oie-4b |
abstrativo | 4B | melhor perfect match entre os modelos ajustados |
qwen3-oie-8b |
abstrativo | 8B | melhor F1 lexical reportado na tese |
portuguese-t5-oie-abstractive |
abstrativo | 770M | alternativa menor, validada ponta a ponta no snapshot público |
portuguese-t5-oie |
experimental | 770M | tarefa e prompt exatos ainda sem proveniência recuperada |
llama-port-oie3 |
extrativo | GGUF 8B | linha generativa Llama 3/PortOIE via llama.cpp |
portnoie |
extrativo | PyTorch | spans do texto; migração moderna experimental do modelo de 2022 |
Detalhes, métricas e identificadores exatos estão no guia de modelos. Veja também o mapa dos projetos, que separa PortNOIE 2022, GenPtOIE, PTOIE/TransAlign e os datasets.
Os identificadores públicos são Model.QWEN3_OIE_0_6B, Model.QWEN3_OIE_4B,
Model.QWEN3_OIE_8B, Model.PORTUGUESE_T5_OIE_ABSTRACTIVE,
Model.PORTUGUESE_T5_OIE, Model.LLAMA_PORT_OIE3 e Model.PORTNOIE. Os aliases em
string continuam aceitos para compatibilidade.
O registro também expõe spec.status: validated indica um teste ponta a ponta do
artefato, research indica evidência experimental documentada e experimental
indica que ainda há lacunas de proveniência ou equivalência. A CLI mostra esse estado
com --list-models.
Usando o PortNOIE
O PortNOIE fica em um pacote separado por ter implementação e dependências próprias. O
backend padrão reconstrói o grafo em PyTorch atual; texto bruto também usa o modelo
linguístico pt_core_news_lg:
pip install "portnoie[modern]"
Na primeira extração, a biblioteca baixa o checkpoint histórico de cerca de 75 MB
de bratao/PortNOIE, na revisão fixada e
verificada por hashes. Para texto bruto, também instala pt_core_news_lg==3.8.0
se ausente: a wheel oficial tem 568.207.147 bytes. A instalação usa pip ou
uv no Python em execução, com URL e SHA-256 fixados. Chamadas seguintes reutilizam
o checkpoint em cache e o pipeline carregado.
from portuguese_openie import Model, PortugueseOpenIE
extractor = PortugueseOpenIE(Model.PORTNOIE)
print([triple.to_dict() for triple in extractor.extract(
"Maria escreveu um livro."
)])
# [{'ARG0': 'Maria', 'V': 'escreveu', 'ARG1': 'um livro'}]
Veja o guia do PortNOIE para cache, checkpoint local e requisitos.
O checkpoint histórico de referência publicado com o código original (LSTM 1×384 + Flair, 74,8 MB) é distribuído pelo Hugging Face, não pelo wheel. O novo backend evita AllenNLP e os dois downloads Flair externos, mas permanece marcado como experimental até ser comparado numericamente com o pipeline legado. O melhor experimento BERTimbau Large da tese é um artefato local diferente, de aproximadamente 1,38 GB, e não é apresentado como se fosse o mesmo arquivo.
Escolha entre OpenIE extrativa e abstrativa
Extrativa preserva a proveniência: os argumentos e a relação são trechos da frase. É adequada para auditoria, destaque no texto e aplicações que exigem rastreabilidade.
Abstrativa pode resolver referências, normalizar relações e explicitar fatos implícitos. É mais apropriada para consolidar conhecimento, mas o texto gerado deve ser validado em aplicações sensíveis.
Hardware
qwen3-oie-0.6be os modelos T5 são as opções mais acessíveis.- Os modelos 4B/8B normalmente exigem GPU ou quantização/offload.
llama-port-oie3baixallama3_finetune.gguf(8,54 GB) e pode executar em CPU; configuren_gpu_layerspara offload em GPU quando suportado.device_map="auto"edtype="auto"são usados por padrão.- Entradas Transformers são truncadas em 2.048 tokens por padrão, em linha com o
comprimento usado no ajuste Qwen; altere com
max_input_tokensse necessário. - Para execução offline, faça uma primeira execução online para preencher o cache e
depois use
local_files_only=True.
extractor = PortugueseOpenIE(
Model.QWEN3_OIE_0_6B,
local_files_only=True,
)
Desenvolvimento e testes
python -m pip install -e ".[dev]"
ruff check .
pytest
Os testes unitários não baixam pesos. A validação ponta a ponta de cada modelo é separada porque os artefatos variam de aproximadamente 0,6B a 8B parâmetros. Os testes reais do Qwen3OIE-0.6B e do PortugueseT5OieAbstractive, com revisões e checksums fixados, estão documentados em docs/VALIDATION.md. Mantenedores podem seguir o guia de release para publicar no PyPI e no GitHub sem tokens persistentes.
Limitações
- OpenIE não garante factualidade; modelos generativos podem alucinar.
- A avaliação da tese usa corpora majoritariamente enciclopédicos e jornalísticos.
- O PortNOIE produz relações binárias e não cobre todas as sobreposições ou relações n-árias.
- O tempo e a memória dependem do modelo e do hardware.
- Os três repositórios Qwen têm licença Apache-2.0. Os repositórios T5 e Llama-PortOIE3 não declaram licença própria; confirme a licença antes de redistribuir pesos.
- Os estados de treino publicados para os modelos T5 parecem parciais, portanto a
proveniência de treino ainda exige confirmação. Isso não invalida o teste E2E do
snapshot
PortugueseT5OieAbstractive, marcadovalidated;PortugueseT5Oiecontinuaexperimental, e os demais artefatos T5 não têm alias OpenIE nesta versão. - O extra
[all]incluillama-cpp-python; em plataformas sem wheel binário compatível, a instalação pode exigir CMake e um compilador C/C++.
Citação
Use o arquivo CITATION.cff. Como referência principal da linha PortNOIE, cite também o artigo:
Cabral, Bruno; Souza, Marlo; Claro, Daniela Barreiro. “PortNOIE: A Neural Framework for Open Information Extraction for the Portuguese Language.” PROPOR, 2022.
E, para o conjunto completo de modelos e dados:
Cabral, Bruno Souza. “Evolving Open Information Extraction for Portuguese employing Language Models.” Tese de Doutorado, Universidade Federal da Bahia, 2025.
Licença
O código desta biblioteca usa a licença Apache-2.0. Pesos e datasets são artefatos separados e mantêm as licenças indicadas em seus respectivos cartões ou repositórios. Consulte o NOTICE antes de redistribuir.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file portuguese_openie-0.1.0.tar.gz.
File metadata
- Download URL: portuguese_openie-0.1.0.tar.gz
- Upload date:
- Size: 51.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa06b114629deedf062b64f4f4f756f74b2d47565fd86f02152eb3415bb0f599
|
|
| MD5 |
15626aab9e3535042c063393fa15e4e0
|
|
| BLAKE2b-256 |
e7bd3c9a7af0e91f01cf337a82ae7aab19e93f0c2fc12ce89a18741c8f49bac9
|
Provenance
The following attestation bundles were made for portuguese_openie-0.1.0.tar.gz:
Publisher:
publish.yml on FORMAS/Portuguese-OpenIE
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
portuguese_openie-0.1.0.tar.gz -
Subject digest:
aa06b114629deedf062b64f4f4f756f74b2d47565fd86f02152eb3415bb0f599 - Sigstore transparency entry: 2655536076
- Sigstore integration time:
-
Permalink:
FORMAS/Portuguese-OpenIE@2abb271dccfdd4753a4304692425319637fe3a21 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/FORMAS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2abb271dccfdd4753a4304692425319637fe3a21 -
Trigger Event:
push
-
Statement type:
File details
Details for the file portuguese_openie-0.1.0-py3-none-any.whl.
File metadata
- Download URL: portuguese_openie-0.1.0-py3-none-any.whl
- Upload date:
- Size: 24.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0c157b8a9945ce03d745c61ee9d1e59b54173bcd3ac7fac12c5a9a768a726bb
|
|
| MD5 |
6ae8b2582a3581f50884f8d8819b4520
|
|
| BLAKE2b-256 |
e87fefcce6c574a3742e7f753dc1ce958641476ffe89135e7c82cebf5759c972
|
Provenance
The following attestation bundles were made for portuguese_openie-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on FORMAS/Portuguese-OpenIE
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
portuguese_openie-0.1.0-py3-none-any.whl -
Subject digest:
c0c157b8a9945ce03d745c61ee9d1e59b54173bcd3ac7fac12c5a9a768a726bb - Sigstore transparency entry: 2655536102
- Sigstore integration time:
-
Permalink:
FORMAS/Portuguese-OpenIE@2abb271dccfdd4753a4304692425319637fe3a21 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/FORMAS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2abb271dccfdd4753a4304692425319637fe3a21 -
Trigger Event:
push
-
Statement type: