Skip to main content

Portuguese OpenIE

English version

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.6b e os modelos T5 são as opções mais acessíveis.
  • Os modelos 4B/8B normalmente exigem GPU ou quantização/offload.
  • llama-port-oie3 baixa llama3_finetune.gguf (8,54 GB) e pode executar em CPU; configure n_gpu_layers para offload em GPU quando suportado.
  • device_map="auto" e dtype="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_tokens se 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, marcado validated; PortugueseT5Oie continua experimental, e os demais artefatos T5 não têm alias OpenIE nesta versão.
  • O extra [all] inclui llama-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

portuguese_openie-0.1.0.tar.gz (51.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

portuguese_openie-0.1.0-py3-none-any.whl (24.1 kB view details)

Uploaded Python 3

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

Hashes for portuguese_openie-0.1.0.tar.gz
Algorithm Hash digest
SHA256 aa06b114629deedf062b64f4f4f756f74b2d47565fd86f02152eb3415bb0f599
MD5 15626aab9e3535042c063393fa15e4e0
BLAKE2b-256 e7bd3c9a7af0e91f01cf337a82ae7aab19e93f0c2fc12ce89a18741c8f49bac9

See more details on using hashes here.

Provenance

The following attestation bundles were made for portuguese_openie-0.1.0.tar.gz:

Publisher: publish.yml on FORMAS/Portuguese-OpenIE

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file portuguese_openie-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for portuguese_openie-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0c157b8a9945ce03d745c61ee9d1e59b54173bcd3ac7fac12c5a9a768a726bb
MD5 6ae8b2582a3581f50884f8d8819b4520
BLAKE2b-256 e87fefcce6c574a3742e7f753dc1ce958641476ffe89135e7c82cebf5759c972

See more details on using hashes here.

Provenance

The following attestation bundles were made for portuguese_openie-0.1.0-py3-none-any.whl:

Publisher: publish.yml on FORMAS/Portuguese-OpenIE

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page