Loading...
Loading...
Loading...
- **Primary Model**: `all-MiniLM-L6-v2` base model with legal domain fine-tuning
# Legal Brief Matcher: Technical Documentation
## Model Architecture & Technical Implementation
### Core Model Components
#### 1. Embedding Engine (SentenceTransformer-based)
- **Primary Model**: `all-MiniLM-L6-v2` base model with legal domain fine-tuning
- **Fallback Path**: Attempts to use `nlpaueb/legal-bert-base-uncased` first, falls back to general model if unavailable
- **Vector Dimensions**: 384-dimensional dense representations of legal text
- **Batching Strategy**: Processes texts in batches of 32 for memory efficiency
- **Technical Advantage**: Captures semantic relationships beyond keyword matching
#### 2. Legal Domain Enhancement Layer
- **Citation Pattern Recognition**: RegEx-based extraction with specialized patterns for:
- Case law: `r'([A-Za-z\s\.\,\']+)\sv\.\s([A-Za-z\s\.\,\']+),\s+(\d+)\s+([A-Za-z\.]+)\s+(\d+)\s*\(([^)]+)\)'`
- Statutes: `r'(\d+)\s+([A-Za-z\.]+)\s+§\s*(\d+[a-z0-9\-]*)'`
- Rules: `r'(Rule|Fed\.\s*R\.\s*(Civ|App|Evid|Crim)\.\s*P\.)\s+(\d+)(\([a-z]\))?'`
- **Legal Tests Detection**: Pattern matching for tests like strict scrutiny, rational basis, etc.
- **Standard of Review Classification**: Identifies appellate standards (de novo, abuse of discretion)
- **Argument Pattern Identification**: Classifies into:
- Injunction factors
- Property law arguments
- Constitutional claims
- Procedural arguments
#### 3. Matcher Algorithm
- **Primary Algorithm**: Hungarian algorithm for optimal assignment (implemented via `scipy.optimize.linear_sum_assignment`)
- **Fallback Algorithm**: Greedy matching when scipy is unavailable
- **Cost Matrix**: Generated from negative similarity scores for optimization
- **Threshold Filtering**: Minimum threshold of 0.35 confidence for valid matches
- **Technical Innovation**: Combines structural heading patterns with semantic content
#### 4. Confidence Scoring System
- **Base Vector Similarity**: Cosine similarity of embeddings (30-50% of score weight)
- **Citation-Based Boosting**: `citation_boost = min(0.2, citation_count * 0.05)`
- **Heading Pattern Matching**: Binary 0.15 boost for structural matches
- **Legal Terminology Detection**: Up to 0.15 based on shared legal terms
- **Counter-Argument Pattern Detection**: 0.1 boost for detected patterns
- **Length Ratio Penalty**: `length_penalty = 0.1 * (1 - min(len1, len2) / max(len1, len2))`
- **Final Capped Score**: `min(1.0, base + boosts - penalties)`
#### 5. Visualization Engine
- **Network Graph**: Directed graph using NetworkX
- **Node Styling**: Size varies by argument complexity (400 + complexity*2)
- **Edge Styling**: Width and color based on confidence levels
- **Citation Indicators**: Dynamic sizing based on shared citation count
- **Confidence Factor Charts**: Breakdown visualizations using Matplotlib
## Data Pipeline & Workflow
### 1. Data Ingestion
```
File Upload/Example Data → JSON Parsing → Brief Pair Extraction → Argument Segmentation
```
- Each brief is segmented into arguments with headings and content
- Special handling for legal document structure (numbered sections, Roman numerals)
### 2. Preprocessing
```
Raw Text → Citation Extraction → Legal Term Identification → Heading Structure Analysis → Feature Vectors
```
- Text cleaning preserves legal citation formats and terminology
- Structural analysis of headings identifies potential counter-argument patterns
- Feature engineering includes legal-specific metrics (citation count, legal test presence)
### 3. Embedding Generation
```
Processed Text → SentenceTransformer → 384-dim Vectors → Vector Store
```
- Each argument (heading + content) is embedded separately
- Embeddings are generated in batches for efficiency
- Vectors stored temporarily for comparison phase
### 4. Comparison Matrix Generation
```
Moving Brief Vectors × Response Brief Vectors → Similarity Matrix → Enhanced Matrix
```
- All-pairs comparison between moving and response briefs (O(m×n) complexity)
- Base similarity enhanced with legal domain-specific boosts
- Confidence factors calculated and stored for later visualization
### 5. Optimal Matching
```
Enhanced Matrix → Hungarian Algorithm → Threshold Filtering → Final Matches
```
- Cost matrix optimization finds global optimal assignment
- Low-confidence matches filtered out (< 0.35 threshold)
- Results sorted by confidence for presentation
### 6. Visualization & Presentation
```
Matches → Network Graph → Interactive Tables → Confidence Charts → Highlighted Text
```
- Multi-layered presentation with tabbed interface
- Network visualization shows relationship structure
- Detailed views provide insight into match reasoning
## Technical Innovations
### 1. Legal-Domain Specific Pattern Recognition
Our system goes beyond generic text similarity by incorporating specialized legal domain knowledge:
```python
# Example from legal_transformer.py - Legal pattern extraction
self.argument_patterns = {
# Injunction factors
'injunction': {
'likelihood_success': {
'affirm': ['likelihood of success', 'succeed on the merits'],
'counter': ['not likely to succeed', 'no success on merits']
},
# More patterns...
},
# More legal domains...
}
```
This allows identification of specialized legal reasoning structures that general NLP would miss.
### 2. Multi-Factor Confidence Scoring
Unlike single-dimension similarity metrics, our system combines multiple weighted factors:
```python
# Example from legal_matcher.py - Enhanced confidence calculation
enhanced_confidence = min(1.0,
base_similarity
+ citation_boost
+ heading_boost
+ legal_terminology_boost
+ pattern_boost
- length_penalty)
```
This produces more reliable matches in the legal domain where pure semantic similarity can be misleading.
### 3. Structural-Semantic Hybrid Approach
We combine structural analysis (heading patterns, citation formats) with semantic content analysis:
```python
# Example from legal_matcher.py - Structural matching
def is_counter_argument(self, moving_heading, response_heading):
moving_type, moving_value = self.extract_heading_type(moving_heading)
response_type, response_value = self.extract_heading_type(response_heading)
# Check for direct injunction factor matches
if moving_type.startswith('injunction_factors_') and response_type.startswith('injunction_factors_'):
factor_num = moving_type.split('_')[-1]
response_factor_num = response_type.split('_')[-1]
if factor_num == response_factor_num:
return True
# Additional structural matching logic...
```
This hybrid approach significantly outperforms purely semantic systems on legal documents.
### 4. Citation Analysis & Impact
Our system not only identifies citations but analyzes their impact on arguments:
```python
# Example - Citation overlap importance
citation_overlap = len(citations1.intersection(citations2)) / max(1, len(citations1.union(citations2)))
citation_boost = min(0.2, citation_count * 0.05) # Cap at 0.2 boost
```
This recognizes the unique importance of legal authorities in brief argumentation.
### 5. Fallback Architecture
The system implements graceful degradation when optimal components are unavailable:
- Legal-domain transformers → general-purpose transformers
- Hungarian algorithm → greedy matching algorithm
- Full visualization → simplified visualization
This ensures reliability across different deployment environments.
## Technical Comparison with Other Approaches
| Feature | Our System | Generic NLP | Simple Embedding Models | Rule-Based Systems |
|---------|------------|-------------|------------------------|-------------------|
| Legal pattern recognition | ✓ | ✗ | ✗ | Partial |
| Citation analysis | Advanced | None | None | Basic |
| Multi-factor confidence | ✓ | ✗ | ✗ | ✗ |
| Structural-semantic hybrid | ✓ | ✗ | ✗ | Partial |
| Explainable matching | ✓ | ✗ | Limited | ✓ |
| Optimal assignment | ✓ | N/A | Basic | N/A |
| Visualization richness | High | Low | Low | Medium |
| Computational efficiency | Medium | High | High | Low |
## Implementation Details
### Technologies Used
- **Python 3.12**: Core implementation language
- **PyTorch 2.6.0**: Backend for transformer models
- **Transformers 4.34.1**: Hugging Face transformers library
- **SentenceTransformers 2.3.0**: High-level interface for embeddings
- **Scikit-learn 1.6.1**: For metrics and additional ML utilities
- **NetworkX 3.4.2**: Network graph generation
- **Matplotlib 3.10.1**: Visualization rendering
- **Pandas 2.2.3**: Data manipulation
- **Streamlit 1.44.1**: Web application framework
### Critical Performance Optimizations
1. **Batch Processing**: Embeddings generated in batches of 32 for memory efficiency
2. **Sparse Computation**: Citation and pattern matching done separately from embedding
3. **Caching**: `@st.cache_data` decorators for expensive computations
4. **Thresholding**: Early filtering of low-confidence matches
5. **Visualization Efficiency**: Limit node sizes and edge counts
### Memory Footprint
- Base model: ~90MB
- Legal enhancement layer: ~2MB
- Runtime peak memory: ~600MB (processing a standard brief pair)
## Future Technological Directions
### 1. Parallel Processing Pipeline
Implement parallel processing of multiple brief pairs using Python's concurrent.futures:
```python
with concurrent.futures.ProcessPoolExecutor() as executor:
results = list(executor.map(process_brief_pair, brief_pairs))
```
### 2. Fine-Tuned Legal Transformer
Custom fine-tuning of legal transformer on brief pairs with known matches:
```python
# Contrastive learning approach
model.train([
(moving_arg, matching_response_arg, 1.0), # Positive pair
(moving_arg, non_matching_response_arg, 0.0) # Negative pair
])
```
### 3. Interactive Learning System
Implementation of feedback loop for continuous improvement:
```python
# User feedback collection
user_feedback = {
'match_id': match_id,
'correct': True/False,
'suggested_confidence': 0.85,
'comments': "This match is strong due to shared citations..."
}
# Update system weights based on feedback
```
### 4. GPU Acceleration
Optimization for GPU deployment:
```python
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)
embeddings = model.encode(texts, device=device)
```
### 5. API Service
Deployment as scalable API service using FastAPI:
```python
@app.post("/analyze_brief_pair")
async def analyze_brief_pair(brief_pair: BriefPair):
matches = matcher.analyze_brief_pair(brief_pair.dict())
return {"matches": matches}
``` > Design document analyzing how user actions feed back into ML predictions,
This document provides a complete reference for all exported APIs in the go-attention library.
This document captures important learnings and best practices discovered while building and maintaining the Papr Memory Python SDK, specifically around on-device processing and Core ML integration.
Tensor factorization is a method for decomposing tensors, which are described in [Section @sec:loading-rescal], into lower-rank approximations.